Skip to content

Commit

Permalink
Non-subdir completion for in-prompt cd
Browse files Browse the repository at this point in the history
Refs #346
  • Loading branch information
kien committed Mar 22, 2013
1 parent 7037f92 commit 76f4f42
Showing 1 changed file with 28 additions and 4 deletions.
32 changes: 28 additions & 4 deletions autoload/ctrlp.vim
Original file line number Diff line number Diff line change
Expand Up @@ -652,11 +652,26 @@ fu! s:PrtExpandDir()
if str =~ '\v^\@(cd|lc[hd]?|chd)\s.+' && s:spi
let hasat = split(str, '\v^\@(cd|lc[hd]?|chd)\s*\zs')
let str = get(hasat, 1, '')
if str =~# '\v^[~$]\i{-}[\/]?|^#(\<?\d+)?:(p|h|8|\~|\.|g?s+)'
let str = expand(s:fnesc(str, 'g'))
elsei str =~# '\v^(\%|\<c\h{4}\>):(p|h|8|\~|\.|g?s+)'
let spc = str =~# '^%' ? s:crfile
\ : str =~# '^<cfile>' ? s:crgfile
\ : str =~# '^<cword>' ? s:crword
\ : str =~# '^<cWORD>' ? s:crnbword : ''
let pat = '(:(p|h|8|\~|\.|g?s(.)[^\3]*\3[^\3]*\3))+'
let mdr = matchstr(str, '\v^[^:]+\zs'.pat)
let nmd = matchstr(str, '\v^[^:]+'.pat.'\zs.{-}$')
let str = fnamemodify(s:fnesc(spc, 'g'), mdr).nmd
en
en
if str == '' | retu | en
unl! s:hstgot
let s:act_add = 1
let [base, seed] = s:headntail(str)
if str =~# '^[\/]'
let base = expand('/').base
en
let dirs = s:dircompl(base, seed)
if len(dirs) == 1
let str = dirs[0]
Expand Down Expand Up @@ -1333,8 +1348,16 @@ endf
" Directory completion {{{3
fu! s:dircompl(be, sd)
if a:sd == '' | retu [] | en
let [be, sd] = a:be == '' ? [s:dyncwd, a:sd] : [a:be, a:be.s:lash(a:be).a:sd]
let dirs = ctrlp#rmbasedir(split(globpath(s:fnesc(be, 'g', ','), a:sd.'*/'), "\n"))
if a:be == ''
let [be, sd] = [s:dyncwd, a:sd]
el
let be = a:be.s:lash(a:be)
let sd = be.a:sd
en
let dirs = split(globpath(s:fnesc(be, 'g', ','), a:sd.'*/'), "\n")
if a:be == ''
let dirs = ctrlp#rmbasedir(dirs)
en
cal filter(dirs, '!match(v:val, escape(sd, ''~$.\''))'
\ . ' && v:val !~ ''\v(^|[\/])\.{1,2}[\/]$''')
retu dirs
Expand Down Expand Up @@ -1856,10 +1879,11 @@ endf
fu! s:getenv()
let [s:cwd, s:winres] = [getcwd(), [winrestcmd(), &lines, winnr('$')]]
let [s:crfile, s:crfpath] = [expand('%:p', 1), expand('%:p:h', 1)]
let [s:crword, s:crline] = [expand('<cword>', 1), getline('.')]
let [s:crword, s:crnbword] = [expand('<cword>', 1), expand('<cWORD>', 1)]
let [s:crgfile, s:crline] = [expand('<cfile>', 1), getline('.')]
let [s:winh, s:crcursor] = [min([s:mxheight, &lines]), getpos('.')]
let [s:crbufnr, s:crvisual] = [bufnr('%'), s:lastvisual()]
let [s:mrbs, s:crgfile] = [ctrlp#mrufiles#bufs(), expand('<cfile>', 1)]
let s:mrbs = ctrlp#mrufiles#bufs()
endf

fu! s:lastvisual()
Expand Down

0 comments on commit 76f4f42

Please sign in to comment.