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.
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ GemHadar do
15
15
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', '.AppleDouble', 'tags'
16
16
  readme 'README.rdoc'
17
17
 
18
- dependency 'tins', '~>0.5'
18
+ dependency 'tins', '~>0.6'
19
19
  dependency 'term-ansicolor', '~>1.0'
20
20
  dependency 'dslkit', '~>0.2.10'
21
21
  dependency 'pry-editline'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.57
1
+ 0.0.58
data/bin/on_change ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ def execute(*args)
5
+ cmd = args.map(&:inspect) * ' '
6
+ puts "Executing: #{cmd}"
7
+ IO.popen(cmd, 'r') do |io|
8
+ io.each { |l| puts l }
9
+ end
10
+ end
11
+
12
+ argv = ARGV
13
+ filename = argv.shift or fail "require a filename as first argument"
14
+ warn "Observing #{filename.inspect} for changes now and execute #{argv.inspect}."
15
+ argv.empty? and argv << 'true'
16
+ old_mtime = nil
17
+ loop do
18
+ begin
19
+ mtime = File.mtime(filename)
20
+ if old_mtime.nil? || mtime > old_mtime
21
+ execute(*argv)
22
+ else
23
+ sleep 0.1
24
+ end
25
+ rescue Interrupt
26
+ exit 1
27
+ rescue Errno::ENOENT
28
+ ensure
29
+ old_mtime = mtime
30
+ end
31
+ end
data/bin/probe CHANGED
@@ -27,6 +27,11 @@ def cmd(*args)
27
27
  system(*args)
28
28
  end
29
29
 
30
+ def find_cmd(*cmds)
31
+ cmds.map { |c| `which #{c}`.full?(:chomp) }.compact.first or
32
+ raise fail "no #{cmds * '|'} command found"
33
+ end
34
+
30
35
  $config = Utils::Config::ConfigFile.new
31
36
  $config.configure_from_paths
32
37
  testrunner_args = []
@@ -44,8 +49,7 @@ puts "Running tests in #{args.inspect}"
44
49
 
45
50
  case ($opt['t'] || $config.probe.test_framework).to_sym
46
51
  when :rspec
47
- rspec = `which rspec`.full?(:chomp) || `which spec`.full?(:chomp) or
48
- raise fail "no spec or rspec command found"
52
+ rspec = find_cmd('rspec', 'spec')
49
53
  if linenumber = $opt['n']
50
54
  cmd 'ruby', '-I', $config.probe.include_dirs_argument, rspec, '-l',
51
55
  linenumber, *(args + testrunner_args)
@@ -61,7 +65,7 @@ when :rspec
61
65
  *(args + testrunner_args)
62
66
  end
63
67
  when :'test-unit'
64
- testrb = `which testrb`.full?(:chomp) or raise fail "no testrb command found"
68
+ testrb = find_cmd('testrb')
65
69
  if testname = $opt['n']
66
70
  cmd 'ruby', '-I', $config.probe.include_dirs_argument, '-S', testrb,
67
71
  '-n', testname, *(args + testrunner_args)
@@ -0,0 +1,139 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/bookmarkdir.vim
3
+ " Description: Bookmarked directories extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_bookmarkdir') && g:loaded_ctrlp_bookmarkdir
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_bookmarkdir = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#bookmarkdir#init()',
15
+ \ 'accept': 'ctrlp#bookmarkdir#accept',
16
+ \ 'lname': 'bookmarked dirs',
17
+ \ 'sname': 'bkd',
18
+ \ 'type': 'tabs',
19
+ \ 'opmul': 1,
20
+ \ 'nolim': 1,
21
+ \ 'wipe': 'ctrlp#bookmarkdir#remove',
22
+ \ })
23
+
24
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
25
+ " Utilities {{{1
26
+ fu! s:getinput(str, ...)
27
+ echoh Identifier
28
+ cal inputsave()
29
+ let input = call('input', a:0 ? [a:str] + a:000 : [a:str])
30
+ cal inputrestore()
31
+ echoh None
32
+ retu input
33
+ endf
34
+
35
+ fu! s:cachefile()
36
+ if !exists('s:cadir') || !exists('s:cafile')
37
+ let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'bkd'
38
+ let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt'
39
+ en
40
+ retu s:cafile
41
+ endf
42
+
43
+ fu! s:writecache(lines)
44
+ cal ctrlp#utils#writecache(a:lines, s:cadir, s:cafile)
45
+ endf
46
+
47
+ fu! s:getbookmarks()
48
+ retu ctrlp#utils#readfile(s:cachefile())
49
+ endf
50
+
51
+ fu! s:savebookmark(name, cwd)
52
+ let entries = filter(s:getbookmarks(), 's:parts(v:val)[1] != a:cwd')
53
+ cal s:writecache(insert(entries, a:name.' '.a:cwd))
54
+ endf
55
+
56
+ fu! s:setentries()
57
+ let time = getftime(s:cachefile())
58
+ if !( exists('s:bookmarks') && time == s:bookmarks[0] )
59
+ let s:bookmarks = [time, s:getbookmarks()]
60
+ en
61
+ endf
62
+
63
+ fu! s:parts(str)
64
+ let mlist = matchlist(a:str, '\v([^\t]+)\t(.*)$')
65
+ retu mlist != [] ? mlist[1:2] : ['', '']
66
+ endf
67
+
68
+ fu! s:process(entries, type)
69
+ retu map(a:entries, 's:modify(v:val, a:type)')
70
+ endf
71
+
72
+ fu! s:modify(entry, type)
73
+ let [name, dir] = s:parts(a:entry)
74
+ let dir = fnamemodify(dir, a:type)
75
+ retu name.' '.( dir == '' ? '.' : dir )
76
+ endf
77
+
78
+ fu! s:msg(name, cwd)
79
+ redr
80
+ echoh Identifier | echon 'Bookmarked ' | echoh Constant
81
+ echon a:name.' ' | echoh Directory | echon a:cwd
82
+ echoh None
83
+ endf
84
+
85
+ fu! s:syntax()
86
+ if !ctrlp#nosy()
87
+ cal ctrlp#hicheck('CtrlPBookmark', 'Identifier')
88
+ cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
89
+ sy match CtrlPBookmark '^> [^\t]\+' contains=CtrlPLinePre
90
+ sy match CtrlPTabExtra '\zs\t.*\ze$'
91
+ en
92
+ endf
93
+ " Public {{{1
94
+ fu! ctrlp#bookmarkdir#init()
95
+ cal s:setentries()
96
+ cal s:syntax()
97
+ retu s:process(copy(s:bookmarks[1]), ':.')
98
+ endf
99
+
100
+ fu! ctrlp#bookmarkdir#accept(mode, str)
101
+ let parts = s:parts(s:modify(a:str, ':p'))
102
+ cal call('s:savebookmark', parts)
103
+ if a:mode =~ 't\|v\|h'
104
+ cal ctrlp#exit()
105
+ en
106
+ cal ctrlp#setdir(parts[1], a:mode =~ 't\|h' ? 'chd!' : 'lc!')
107
+ if a:mode == 'e'
108
+ cal ctrlp#switchtype(0)
109
+ cal ctrlp#recordhist()
110
+ cal ctrlp#prtclear()
111
+ en
112
+ endf
113
+
114
+ fu! ctrlp#bookmarkdir#add(dir)
115
+ let str = 'Directory to bookmark: '
116
+ let cwd = a:dir != '' ? a:dir : s:getinput(str, getcwd(), 'dir')
117
+ if cwd == '' | retu | en
118
+ let cwd = fnamemodify(cwd, ':p')
119
+ let name = s:getinput('Bookmark as: ', cwd)
120
+ if name == '' | retu | en
121
+ let name = tr(name, ' ', ' ')
122
+ cal s:savebookmark(name, cwd)
123
+ cal s:msg(name, cwd)
124
+ endf
125
+
126
+ fu! ctrlp#bookmarkdir#remove(entries)
127
+ cal s:process(a:entries, ':p')
128
+ cal s:writecache(a:entries == [] ? [] :
129
+ \ filter(s:getbookmarks(), 'index(a:entries, v:val) < 0'))
130
+ cal s:setentries()
131
+ retu s:process(copy(s:bookmarks[1]), ':.')
132
+ endf
133
+
134
+ fu! ctrlp#bookmarkdir#id()
135
+ retu s:id
136
+ endf
137
+ "}}}
138
+
139
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,238 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/buffertag.vim
3
+ " Description: Buffer Tag extension
4
+ " Maintainer: Kien Nguyen <github.com/kien>
5
+ " Credits: Much of the code was taken from tagbar.vim by Jan Larres, plus
6
+ " a few lines from taglist.vim by Yegappan Lakshmanan and from
7
+ " buffertag.vim by Takeshi Nishida.
8
+ " =============================================================================
9
+
10
+ " Init {{{1
11
+ if exists('g:loaded_ctrlp_buftag') && g:loaded_ctrlp_buftag
12
+ fini
13
+ en
14
+ let g:loaded_ctrlp_buftag = 1
15
+
16
+ cal add(g:ctrlp_ext_vars, {
17
+ \ 'init': 'ctrlp#buffertag#init(s:crfile)',
18
+ \ 'accept': 'ctrlp#buffertag#accept',
19
+ \ 'lname': 'buffer tags',
20
+ \ 'sname': 'bft',
21
+ \ 'exit': 'ctrlp#buffertag#exit()',
22
+ \ 'type': 'tabs',
23
+ \ 'opts': 'ctrlp#buffertag#opts()',
24
+ \ })
25
+
26
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
27
+
28
+ let [s:pref, s:opts] = ['g:ctrlp_buftag_', {
29
+ \ 'systemenc': ['s:enc', &enc],
30
+ \ 'ctags_bin': ['s:bin', ''],
31
+ \ 'types': ['s:usr_types', {}],
32
+ \ }]
33
+
34
+ let s:bins = [
35
+ \ 'ctags-exuberant',
36
+ \ 'exuberant-ctags',
37
+ \ 'exctags',
38
+ \ '/usr/local/bin/ctags',
39
+ \ '/opt/local/bin/ctags',
40
+ \ 'ctags',
41
+ \ 'ctags.exe',
42
+ \ 'tags',
43
+ \ ]
44
+
45
+ let s:types = {
46
+ \ 'asm' : '%sasm%sasm%sdlmt',
47
+ \ 'aspperl': '%sasp%sasp%sfsv',
48
+ \ 'aspvbs' : '%sasp%sasp%sfsv',
49
+ \ 'awk' : '%sawk%sawk%sf',
50
+ \ 'beta' : '%sbeta%sbeta%sfsv',
51
+ \ 'c' : '%sc%sc%sdgsutvf',
52
+ \ 'cpp' : '%sc++%sc++%snvdtcgsuf',
53
+ \ 'cs' : '%sc#%sc#%sdtncEgsipm',
54
+ \ 'cobol' : '%scobol%scobol%sdfgpPs',
55
+ \ 'eiffel' : '%seiffel%seiffel%scf',
56
+ \ 'erlang' : '%serlang%serlang%sdrmf',
57
+ \ 'expect' : '%stcl%stcl%scfp',
58
+ \ 'fortran': '%sfortran%sfortran%spbceiklmntvfs',
59
+ \ 'html' : '%shtml%shtml%saf',
60
+ \ 'java' : '%sjava%sjava%spcifm',
61
+ \ 'javascript': '%sjavascript%sjavascript%sf',
62
+ \ 'lisp' : '%slisp%slisp%sf',
63
+ \ 'lua' : '%slua%slua%sf',
64
+ \ 'make' : '%smake%smake%sm',
65
+ \ 'pascal' : '%spascal%spascal%sfp',
66
+ \ 'perl' : '%sperl%sperl%sclps',
67
+ \ 'php' : '%sphp%sphp%scdvf',
68
+ \ 'python' : '%spython%spython%scmf',
69
+ \ 'rexx' : '%srexx%srexx%ss',
70
+ \ 'ruby' : '%sruby%sruby%scfFm',
71
+ \ 'scheme' : '%sscheme%sscheme%ssf',
72
+ \ 'sh' : '%ssh%ssh%sf',
73
+ \ 'csh' : '%ssh%ssh%sf',
74
+ \ 'zsh' : '%ssh%ssh%sf',
75
+ \ 'slang' : '%sslang%sslang%snf',
76
+ \ 'sml' : '%ssml%ssml%secsrtvf',
77
+ \ 'sql' : '%ssql%ssql%scFPrstTvfp',
78
+ \ 'tcl' : '%stcl%stcl%scfmp',
79
+ \ 'vera' : '%svera%svera%scdefgmpPtTvx',
80
+ \ 'verilog': '%sverilog%sverilog%smcPertwpvf',
81
+ \ 'vim' : '%svim%svim%savf',
82
+ \ 'yacc' : '%syacc%syacc%sl',
83
+ \ }
84
+
85
+ cal map(s:types, 'printf(v:val, "--language-force=", " --", "-types=")')
86
+
87
+ if executable('jsctags')
88
+ cal extend(s:types, { 'javascript': { 'args': '-f -', 'bin': 'jsctags' } })
89
+ en
90
+
91
+ fu! ctrlp#buffertag#opts()
92
+ for [ke, va] in items(s:opts)
93
+ let {va[0]} = exists(s:pref.ke) ? {s:pref.ke} : va[1]
94
+ endfo
95
+ " Ctags bin
96
+ if empty(s:bin)
97
+ for bin in s:bins | if executable(bin)
98
+ let s:bin = bin
99
+ brea
100
+ en | endfo
101
+ el
102
+ let s:bin = expand(s:bin, 1)
103
+ en
104
+ " Types
105
+ cal extend(s:types, s:usr_types)
106
+ endf
107
+ " Utilities {{{1
108
+ fu! s:validfile(fname, ftype)
109
+ if ( !empty(a:fname) || !empty(a:ftype) ) && filereadable(a:fname)
110
+ \ && index(keys(s:types), a:ftype) >= 0 | retu 1 | en
111
+ retu 0
112
+ endf
113
+
114
+ fu! s:exectags(cmd)
115
+ if exists('+ssl')
116
+ let [ssl, &ssl] = [&ssl, 0]
117
+ en
118
+ if &sh =~ 'cmd\.exe'
119
+ let [sxq, &sxq, shcf, &shcf] = [&sxq, '"', &shcf, '/s /c']
120
+ en
121
+ let output = system(a:cmd)
122
+ if &sh =~ 'cmd\.exe'
123
+ let [&sxq, &shcf] = [sxq, shcf]
124
+ en
125
+ if exists('+ssl')
126
+ let &ssl = ssl
127
+ en
128
+ retu output
129
+ endf
130
+
131
+ fu! s:exectagsonfile(fname, ftype)
132
+ let [ags, ft] = ['-f - --sort=no --excmd=pattern --fields=nKs ', a:ftype]
133
+ if type(s:types[ft]) == 1
134
+ let ags .= s:types[ft]
135
+ let bin = s:bin
136
+ elsei type(s:types[ft]) == 4
137
+ let ags = s:types[ft]['args']
138
+ let bin = expand(s:types[ft]['bin'], 1)
139
+ en
140
+ if empty(bin) | retu '' | en
141
+ let cmd = s:esctagscmd(bin, ags, a:fname)
142
+ if empty(cmd) | retu '' | en
143
+ let output = s:exectags(cmd)
144
+ if v:shell_error || output =~ 'Warning: cannot open' | retu '' | en
145
+ retu output
146
+ endf
147
+
148
+ fu! s:esctagscmd(bin, args, ...)
149
+ if exists('+ssl')
150
+ let [ssl, &ssl] = [&ssl, 0]
151
+ en
152
+ let fname = a:0 == 1 ? shellescape(a:1) : ''
153
+ let cmd = shellescape(a:bin).' '.a:args.' '.fname
154
+ if exists('+ssl')
155
+ let &ssl = ssl
156
+ en
157
+ if has('iconv')
158
+ let last = s:enc != &enc ? s:enc : !empty($LANG) ? $LANG : &enc
159
+ let cmd = iconv(cmd, &enc, last)
160
+ en
161
+ retu cmd
162
+ endf
163
+
164
+ fu! s:process(fname, ftype)
165
+ if !s:validfile(a:fname, a:ftype) | retu [] | endif
166
+ let ftime = getftime(a:fname)
167
+ if has_key(g:ctrlp_buftags, a:fname)
168
+ \ && g:ctrlp_buftags[a:fname]['time'] >= ftime
169
+ let lines = g:ctrlp_buftags[a:fname]['lines']
170
+ el
171
+ let data = s:exectagsonfile(a:fname, a:ftype)
172
+ let [raw, lines] = [split(data, '\n\+'), []]
173
+ for line in raw | if len(split(line, ';"')) == 2
174
+ let parsed_line = s:parseline(line)
175
+ if parsed_line != ''
176
+ cal add(lines, parsed_line)
177
+ en
178
+ en | endfo
179
+ let cache = { a:fname : { 'time': ftime, 'lines': lines } }
180
+ cal extend(g:ctrlp_buftags, cache)
181
+ en
182
+ retu lines
183
+ endf
184
+
185
+ fu! s:parseline(line)
186
+ let eval = '\v^([^\t]+)\t(.+)\t\/\^(.+)\$\/\;\"\t(.+)\tline(no)?\:(\d+)'
187
+ let vals = matchlist(a:line, eval)
188
+ if vals == [] | retu '' | en
189
+ let [bufnr, bufname] = [bufnr('^'.vals[2].'$'), fnamemodify(vals[2], ':p:t')]
190
+ retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'| '.vals[3]
191
+ endf
192
+
193
+ fu! s:syntax()
194
+ if !ctrlp#nosy()
195
+ cal ctrlp#hicheck('CtrlPTagKind', 'Title')
196
+ cal ctrlp#hicheck('CtrlPBufName', 'Directory')
197
+ cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
198
+ sy match CtrlPTagKind '\zs[^\t|]\+\ze|\d\+:[^|]\+|\d\+|'
199
+ sy match CtrlPBufName '|\d\+:\zs[^|]\+\ze|\d\+|'
200
+ sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName,CtrlPTagKind
201
+ en
202
+ endf
203
+ " Public {{{1
204
+ fu! ctrlp#buffertag#init(fname)
205
+ let bufs = exists('s:btmode') && s:btmode
206
+ \ ? filter(ctrlp#buffers(), 'filereadable(v:val)')
207
+ \ : [exists('s:bufname') ? s:bufname : a:fname]
208
+ let lines = []
209
+ for each in bufs
210
+ let bname = fnamemodify(each, ':p')
211
+ let tftype = get(split(getbufvar(bname, '&ft'), '\.'), 0, '')
212
+ cal extend(lines, s:process(bname, tftype))
213
+ endfo
214
+ cal s:syntax()
215
+ retu lines
216
+ endf
217
+
218
+ fu! ctrlp#buffertag#accept(mode, str)
219
+ let vals = matchlist(a:str, '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)\|')
220
+ if vals == [] | retu | en
221
+ let [bufnm, linenr] = [fnamemodify(bufname(str2nr(vals[1])), ':p'), vals[2]]
222
+ cal ctrlp#acceptfile(a:mode, bufnm, linenr)
223
+ endf
224
+
225
+ fu! ctrlp#buffertag#cmd(mode, ...)
226
+ let s:btmode = a:mode
227
+ if a:0 && !empty(a:1)
228
+ let s:bufname = fnamemodify(a:1, ':p')
229
+ en
230
+ retu s:id
231
+ endf
232
+
233
+ fu! ctrlp#buffertag#exit()
234
+ unl! s:btmode s:bufname
235
+ endf
236
+ "}}}
237
+
238
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,96 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/changes.vim
3
+ " Description: Change list extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_changes') && g:loaded_ctrlp_changes
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_changes = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#changes#init(s:bufnr, s:crbufnr)',
15
+ \ 'accept': 'ctrlp#changes#accept',
16
+ \ 'lname': 'changes',
17
+ \ 'sname': 'chs',
18
+ \ 'exit': 'ctrlp#changes#exit()',
19
+ \ 'type': 'tabe',
20
+ \ 'sort': 0,
21
+ \ 'nolim': 1,
22
+ \ })
23
+
24
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
25
+ " Utilities {{{1
26
+ fu! s:changelist(bufnr)
27
+ sil! exe 'noa hid b' a:bufnr
28
+ redi => result
29
+ sil! changes
30
+ redi END
31
+ retu map(split(result, "\n")[1:], 'tr(v:val, " ", " ")')
32
+ endf
33
+
34
+ fu! s:process(clines, ...)
35
+ let [clines, evas] = [[], []]
36
+ for each in a:clines
37
+ let parts = matchlist(each, '\v^.\s*\d+\s+(\d+)\s+(\d+)\s(.*)$')
38
+ if !empty(parts)
39
+ if parts[3] == '' | let parts[3] = ' ' | en
40
+ cal add(clines, parts[3].' |'.a:1.':'.a:2.'|'.parts[1].':'.parts[2].'|')
41
+ en
42
+ endfo
43
+ retu reverse(filter(clines, 'count(clines, v:val) == 1'))
44
+ endf
45
+
46
+ fu! s:syntax()
47
+ if !ctrlp#nosy()
48
+ cal ctrlp#hicheck('CtrlPBufName', 'Directory')
49
+ cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
50
+ sy match CtrlPBufName '\t|\d\+:\zs[^|]\+\ze|\d\+:\d\+|$'
51
+ sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
52
+ en
53
+ endf
54
+ " Public {{{1
55
+ fu! ctrlp#changes#init(original_bufnr, bufnr)
56
+ let bufnr = exists('s:bufnr') ? s:bufnr : a:bufnr
57
+ let bufs = exists('s:clmode') && s:clmode ? ctrlp#buffers('id') : [bufnr]
58
+ cal filter(bufs, 'v:val > 0')
59
+ let [swb, &swb] = [&swb, '']
60
+ let lines = []
61
+ for each in bufs
62
+ let fnamet = fnamemodify(bufname(each), ':t')
63
+ cal extend(lines, s:process(s:changelist(each), each, fnamet))
64
+ endfo
65
+ sil! exe 'noa hid b' a:original_bufnr
66
+ let &swb = swb
67
+ cal ctrlp#syntax()
68
+ cal s:syntax()
69
+ retu lines
70
+ endf
71
+
72
+ fu! ctrlp#changes#accept(mode, str)
73
+ let info = matchlist(a:str, '\t|\(\d\+\):[^|]\+|\(\d\+\):\(\d\+\)|$')
74
+ if info == [] | retu | en
75
+ let bufnr = str2nr(get(info, 1))
76
+ if bufnr
77
+ cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'))
78
+ cal cursor(get(info, 2), get(info, 3))
79
+ sil! norm! zvzz
80
+ en
81
+ endf
82
+
83
+ fu! ctrlp#changes#cmd(mode, ...)
84
+ let s:clmode = a:mode
85
+ if a:0 && !empty(a:1)
86
+ let s:bufnr = bufnr('^'.fnamemodify(a:1, ':p').'$')
87
+ en
88
+ retu s:id
89
+ endf
90
+
91
+ fu! ctrlp#changes#exit()
92
+ unl! s:clmode s:bufnr
93
+ endf
94
+ "}}}
95
+
96
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,90 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/dir.vim
3
+ " Description: Directory extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_dir') && g:loaded_ctrlp_dir
9
+ fini
10
+ en
11
+ let [g:loaded_ctrlp_dir, g:ctrlp_newdir] = [1, 0]
12
+
13
+ let s:ars = [
14
+ \ 's:maxdepth',
15
+ \ 's:maxfiles',
16
+ \ 's:compare_lim',
17
+ \ 's:glob',
18
+ \ ]
19
+
20
+ cal add(g:ctrlp_ext_vars, {
21
+ \ 'init': 'ctrlp#dir#init('.join(s:ars, ', ').')',
22
+ \ 'accept': 'ctrlp#dir#accept',
23
+ \ 'lname': 'dirs',
24
+ \ 'sname': 'dir',
25
+ \ 'type': 'path',
26
+ \ 'specinput': 1,
27
+ \ })
28
+
29
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
30
+ " Utilities {{{1
31
+ fu! s:globdirs(dirs, depth)
32
+ let entries = split(globpath(a:dirs, s:glob), "\n")
33
+ let [dirs, depth] = [ctrlp#dirnfile(entries)[0], a:depth + 1]
34
+ cal extend(g:ctrlp_alldirs, dirs)
35
+ let nr = len(g:ctrlp_alldirs)
36
+ if !empty(dirs) && !s:max(nr, s:maxfiles) && depth <= s:maxdepth
37
+ sil! cal ctrlp#progress(nr)
38
+ cal s:globdirs(join(dirs, ','), depth)
39
+ en
40
+ endf
41
+
42
+ fu! s:max(len, max)
43
+ retu a:max && a:len > a:max ? 1 : 0
44
+ endf
45
+ " Public {{{1
46
+ fu! ctrlp#dir#init(...)
47
+ let s:cwd = getcwd()
48
+ for each in range(len(s:ars))
49
+ let {s:ars[each]} = a:{each + 1}
50
+ endfo
51
+ let cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'dir'
52
+ let cafile = cadir.ctrlp#utils#lash().ctrlp#utils#cachefile('dir')
53
+ if g:ctrlp_newdir || !filereadable(cafile)
54
+ let [s:initcwd, g:ctrlp_alldirs] = [s:cwd, []]
55
+ cal s:globdirs(s:cwd, 0)
56
+ cal ctrlp#rmbasedir(g:ctrlp_alldirs)
57
+ if len(g:ctrlp_alldirs) <= s:compare_lim
58
+ cal sort(g:ctrlp_alldirs, 'ctrlp#complen')
59
+ en
60
+ cal ctrlp#utils#writecache(g:ctrlp_alldirs, cadir, cafile)
61
+ let g:ctrlp_newdir = 0
62
+ el
63
+ if !( exists('s:initcwd') && s:initcwd == s:cwd )
64
+ let s:initcwd = s:cwd
65
+ let g:ctrlp_alldirs = ctrlp#utils#readfile(cafile)
66
+ en
67
+ en
68
+ retu g:ctrlp_alldirs
69
+ endf
70
+
71
+ fu! ctrlp#dir#accept(mode, str)
72
+ let path = a:mode == 'h' ? getcwd() : s:cwd.ctrlp#utils#lash().a:str
73
+ if a:mode =~ 't\|v\|h'
74
+ cal ctrlp#exit()
75
+ en
76
+ cal ctrlp#setdir(path, a:mode =~ 't\|h' ? 'chd!' : 'lc!')
77
+ if a:mode == 'e'
78
+ sil! cal ctrlp#statusline()
79
+ cal ctrlp#setlines(s:id)
80
+ cal ctrlp#recordhist()
81
+ cal ctrlp#prtclear()
82
+ en
83
+ endf
84
+
85
+ fu! ctrlp#dir#id()
86
+ retu s:id
87
+ endf
88
+ "}}}
89
+
90
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2
@@ -0,0 +1,63 @@
1
+ " =============================================================================
2
+ " File: autoload/ctrlp/line.vim
3
+ " Description: Line extension
4
+ " Author: Kien Nguyen <github.com/kien>
5
+ " =============================================================================
6
+
7
+ " Init {{{1
8
+ if exists('g:loaded_ctrlp_line') && g:loaded_ctrlp_line
9
+ fini
10
+ en
11
+ let g:loaded_ctrlp_line = 1
12
+
13
+ cal add(g:ctrlp_ext_vars, {
14
+ \ 'init': 'ctrlp#line#init()',
15
+ \ 'accept': 'ctrlp#line#accept',
16
+ \ 'lname': 'lines',
17
+ \ 'sname': 'lns',
18
+ \ 'type': 'tabe',
19
+ \ })
20
+
21
+ let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
22
+ " Utilities {{{1
23
+ fu! s:syntax()
24
+ if !ctrlp#nosy()
25
+ cal ctrlp#hicheck('CtrlPBufName', 'Directory')
26
+ cal ctrlp#hicheck('CtrlPTabExtra', 'Comment')
27
+ sy match CtrlPBufName '\t|\zs[^|]\+\ze|\d\+:\d\+|$'
28
+ sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName
29
+ en
30
+ endf
31
+ " Public {{{1
32
+ fu! ctrlp#line#init()
33
+ let [bufs, lines] = [ctrlp#buffers('id'), []]
34
+ for bufnr in bufs
35
+ let [lfb, bufn] = [getbufline(bufnr, 1, '$'), bufname(bufnr)]
36
+ let lfb = lfb == [] ? ctrlp#utils#readfile(fnamemodify(bufn, ':p')) : lfb
37
+ cal map(lfb, 'tr(v:val, '' '', '' '')')
38
+ let [linenr, len_lfb, buft] = [1, len(lfb), fnamemodify(bufn, ':t')]
39
+ wh linenr <= len_lfb
40
+ let lfb[linenr - 1] .= ' |'.buft.'|'.bufnr.':'.linenr.'|'
41
+ let linenr += 1
42
+ endw
43
+ cal extend(lines, filter(lfb, 'v:val !~ ''^\s*\t|[^|]\+|\d\+:\d\+|$'''))
44
+ endfo
45
+ cal s:syntax()
46
+ retu lines
47
+ endf
48
+
49
+ fu! ctrlp#line#accept(mode, str)
50
+ let info = matchlist(a:str, '\t|[^|]\+|\(\d\+\):\(\d\+\)|$')
51
+ if info == [] | retu | en
52
+ let [bufnr, linenr] = [str2nr(get(info, 1)), get(info, 2)]
53
+ if bufnr > 0
54
+ cal ctrlp#acceptfile(a:mode, fnamemodify(bufname(bufnr), ':p'), linenr)
55
+ en
56
+ endf
57
+
58
+ fu! ctrlp#line#id()
59
+ retu s:id
60
+ endf
61
+ "}}}
62
+
63
+ " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2