Skip to content

Commit 83397bd

Browse files
committed
Use ts-prompt automatically when possible
Closes #451
1 parent 6e4fb3b commit 83397bd

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

autoload/ctrlp/tag.vim

+32-22
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,36 @@ cal add(g:ctrlp_ext_vars, {
2222
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)
2323
" Utilities {{{1
2424
fu! s:findcount(str)
25-
let [tg, fname] = split(a:str, '\t\+\ze[^\t]\+$')
25+
let [tg, ofname] = split(a:str, '\t\+\ze[^\t]\+$')
2626
let tgs = taglist('^'.tg.'$')
2727
if len(tgs) < 2
28-
retu [1, 1]
28+
retu [0, 0, 0, 0]
2929
en
3030
let bname = fnamemodify(bufname('%'), ':p')
31-
let fname = expand(fnamemodify(simplify(fname), ':s?^[.\/]\+??:p:.'), 1)
32-
let [fnd, ct, pos, idx] = [0, 0, 0, 0]
33-
wh idx < len(tgs)
34-
if bname == fnamemodify(tgs[idx]["filename"], ':p')
35-
cal insert(tgs, remove(tgs, idx))
36-
brea
37-
en
38-
let idx += 1
39-
endw
40-
for each in tgs
41-
let ct += 1
42-
let fulname = fnamemodify(each["filename"], ':p')
31+
let fname = expand(fnamemodify(simplify(ofname), ':s?^[.\/]\+??:p:.'), 1)
32+
let [fnd, cnt, pos, ctgs, otgs] = [0, 0, 0, [], []]
33+
for tgi in tgs
34+
let lst = bname == fnamemodify(tgi["filename"], ':p') ? 'ctgs' : 'otgs'
35+
cal call('add', [{lst}, tgi])
36+
endfo
37+
let ntgs = ctgs + otgs
38+
for tgi in ntgs
39+
let cnt += 1
40+
let fulname = fnamemodify(tgi["filename"], ':p')
4341
if stridx(fulname, fname) >= 0
4442
\ && strlen(fname) + stridx(fulname, fname) == strlen(fulname)
4543
let fnd += 1
46-
let pos = ct
44+
let pos = cnt
4745
en
48-
if fnd > 1 | brea | en
4946
endfo
50-
retu [fnd, pos]
47+
let cnt = 0
48+
for tgi in ntgs
49+
let cnt += 1
50+
if tgi["filename"] == ofname
51+
let [fnd, pos] = [0, cnt]
52+
en
53+
endfo
54+
retu [1, fnd, pos, len(ctgs)]
5155
endf
5256

5357
fu! s:filter(tags)
@@ -89,27 +93,33 @@ endf
8993
fu! ctrlp#tag#accept(mode, str)
9094
cal ctrlp#exit()
9195
let str = matchstr(a:str, '^[^\t]\+\t\+[^\t]\+\ze\t')
92-
let [tg, fnd] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
96+
let [tg, fdcnt] = [split(str, '^[^\t]\+\zs\t')[0], s:findcount(str)]
9397
let cmds = {
9498
\ 't': ['tab sp', 'tab stj'],
9599
\ 'h': ['sp', 'stj'],
96100
\ 'v': ['vs', 'vert stj'],
97101
\ 'e': ['', 'tj'],
98102
\ }
99-
let cmd = fnd[0] == 1 ? cmds[a:mode][0] : cmds[a:mode][1]
103+
let utg = fdcnt[3] < 2 && fdcnt[0] == 1 && fdcnt[1] == 1
104+
let cmd = !fdcnt[0] || utg ? cmds[a:mode][0] : cmds[a:mode][1]
100105
let cmd = a:mode == 'e' && ctrlp#modfilecond(!&aw)
101106
\ ? ( cmd == 'tj' ? 'stj' : 'sp' ) : cmd
102107
let cmd = a:mode == 't' ? ctrlp#tabcount().cmd : cmd
103-
if fnd[0] == 1
108+
if !fdcnt[0] || utg
104109
if cmd != ''
105110
exe cmd
106111
en
107112
let save_cst = &cst
108113
set cst&
109-
cal feedkeys(":".fnd[1]."ta ".tg."\r", 'nt')
114+
cal feedkeys(":".( utg ? fdcnt[2] : "" )."ta ".tg."\r", 'nt')
110115
let &cst = save_cst
111116
el
112-
cal feedkeys(":".cmd." ".tg."\r", 'nt')
117+
let ext = ""
118+
if fdcnt[1] < 2 && fdcnt[2]
119+
let [sav_more, &more] = [&more, 0]
120+
let ext = fdcnt[2]."\r".":let &more = ".sav_more."\r"
121+
en
122+
cal feedkeys(":".cmd." ".tg."\r".ext, 'nt')
113123
en
114124
cal ctrlp#setlcdir()
115125
endf

0 commit comments

Comments
 (0)