view vim/autoload/ctrlp/projectjump.vim @ 240:3a6b11d16a2a

Simpler registration for CtrlP extensions.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 12 Dec 2014 16:53:19 -0800
parents
children
line wrap: on
line source

" =============================================================================
" File:          autoload/ctrlp/projectjump.vim
" Description:   Project Jumper Extension
" Author:        Ludovic Chabant <github.com/ludovicchabant>
" =============================================================================


" Global Settings {{{

if !exists('g:ctrlp_projectjump_debug')
    let g:ctrlp_projectjump_debug = 0
endif

if !exists('g:ctrlp_projectjump_trace')
    let g:ctrlp_projectjump_trace = 0
endif

if exists('g:ctrlp_projectjump_loaded') && g:ctrlp_projectjump_loaded
            \ && !g:ctrlp_projectjump_debug
    finish
endif
let g:ctrlp_projectjump_loaded = 1

if !exists('g:ctrlp_projectjump_roots')
    let g:ctrlp_projectjump_roots = []
endif

" }}}

" Init {{{

if !exists('g:ctrlp_ext_vars') 
    let g:ctrlp_ext_vars = []
endif
call add(g:ctrlp_ext_vars, {
    \ 'init': 'ctrlp#projectjump#init()',
    \ 'exit': 'ctrlp#projectjump#exit()',
    \ 'accept': 'ctrlp#projectjump#accept',
    \ 'lname': 'projectjump',
    \ 'sname': 'prjmp',
    \ 'type': 'project'
    \ })
let s:ext_id = g:ctrlp_builtins + len(g:ctrlp_ext_vars)

command! CtrlPProjectJump call ctrlp#init(s:ext_id)

" }}}

" Callbacks {{{

function! ctrlp#projectjump#init() abort
    let l:project_roots = []
    for prj in g:ctrlp_projectjump_roots
        let l:prj_type = get(prj, 'type', 'project')
        if l:prj_type == 'project'
            call add(l:project_roots, prj['path'])
        elseif l:prj_type == 'parent'
            let l:subdirs = glob(prj['path'], 0, 1)
            for sd in l:subdirs
                call add(l:project_roots, sd)
            endfor
        else
            echoerr "CtrlPProjectJump: Unsupported project root type: ".l:prj_type
        endif
    endfor
    return l:project_roots
endfunction

function! ctrlp#projectjump#accept(mode, str) abort
    call ctrlp#exit()
    call ctrlp#init(0, {'dir': a:str})
endfunction

function! ctrlp#projectjump#exit() abort
endfunction

" }}}

" Internals {{{

function! s:trace(message) abort
    if g:ctrlp_projectjump_trace
        echom "ctrlp_projectjump: " . a:message
    endif
endfunction

" }}}