@@ -22,32 +22,36 @@ cal add(g:ctrlp_ext_vars, {
22
22
let s: id = g: ctrlp_builtins + len (g: ctrlp_ext_vars )
23
23
" Utilities {{{1
24
24
fu ! s: findcount (str)
25
- let [tg, fname ] = split (a: str , ' \t\+\ze[^\t]\+$' )
25
+ let [tg, ofname ] = split (a: str , ' \t\+\ze[^\t]\+$' )
26
26
let tgs = taglist (' ^' .tg.' $' )
27
27
if len (tgs) < 2
28
- retu [1 , 1 ]
28
+ retu [0 , 0 , 0 , 0 ]
29
29
en
30
30
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' )
43
41
if stridx (fulname, fname) >= 0
44
42
\ && strlen (fname) + stridx (fulname, fname) == strlen (fulname)
45
43
let fnd += 1
46
- let pos = ct
44
+ let pos = cnt
47
45
en
48
- if fnd > 1 | brea | en
49
46
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)]
51
55
endf
52
56
53
57
fu ! s: filter (tags )
89
93
fu ! ctrlp#tag#accept (mode , str)
90
94
cal ctrlp#exit ()
91
95
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)]
93
97
let cmds = {
94
98
\ ' t' : [' tab sp' , ' tab stj' ],
95
99
\ ' h' : [' sp' , ' stj' ],
96
100
\ ' v' : [' vs' , ' vert stj' ],
97
101
\ ' e' : [' ' , ' tj' ],
98
102
\ }
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 ]
100
105
let cmd = a: mode == ' e' && ctrlp#modfilecond (! &aw )
101
106
\ ? ( cmd == ' tj' ? ' stj' : ' sp' ) : cmd
102
107
let cmd = a: mode == ' t' ? ctrlp#tabcount ().cmd : cmd
103
- if fnd [0 ] == 1
108
+ if ! fdcnt [0 ] || utg
104
109
if cmd != ' '
105
110
exe cmd
106
111
en
107
112
let save_cst = &cst
108
113
set cst &
109
- cal feedkeys (" :" .fnd[ 1 ] ." ta " .tg." \r " , ' nt' )
114
+ cal feedkeys (" :" .( utg ? fdcnt[ 2 ] : " " ) ." ta " .tg." \r " , ' nt' )
110
115
let &cst = save_cst
111
116
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' )
113
123
en
114
124
cal ctrlp#setlcdir ()
115
125
endf
0 commit comments