@@ -22,32 +22,36 @@ cal add(g:ctrlp_ext_vars, {
2222let s: id = g: ctrlp_builtins + len (g: ctrlp_ext_vars )
2323" Utilities {{{1
2424fu ! 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)]
5155endf
5256
5357fu ! s: filter (tags )
8993fu ! 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 ()
115125endf
0 commit comments