Skip to content

Instantly share code, notes, and snippets.

@rscarvalho
Last active August 29, 2015 14:04
Show Gist options
  • Select an option

  • Save rscarvalho/2b578fb96d4e6c0d229a to your computer and use it in GitHub Desktop.

Select an option

Save rscarvalho/2b578fb96d4e6c0d229a to your computer and use it in GitHub Desktop.
OpenProject
let g:OpenProject#folder_prefix = $HOME . "/code/"
let g:OpenProject#projects = {
\"lengio": "lengio/lengio-app",
\"parser": "lengio/parser"
\}
" Open a specific project with a command (e.g. :Lengio<CR>)
command! Lengio OpenProject lengio
" Trigger something when a project is "opened"
au User OpenProject_lengio nested :e! Gemfile
function! OpenProject(project_name)
if exists("g:OpenProject#projects")
let projects = g:OpenProject#projects
else
let projects = {}
endif
if exists("g:OpenProject#folder_prefix")
let project_folder_prefix = g:OpenProject#folder_prefix
else
let project_folder_prefix = $HOME . "/code/"
endif
if has_key(l:projects, a:project_name)
let project_folder = l:project_folder_prefix . l:projects[a:project_name]
elseif strlen(glob(l:project_folder_prefix . a:project_name)) > 0
let project_folder = l:project_folder_prefix . a:project_name
elseif strlen(glob(a:project_name)) > 0
let project_folder = a:project_name
endif
if exists("l:project_folder")
exec ":cd " . l:project_folder
exec ":doautocmd User OpenProject_" . a:project_name
else
exec "normal \<Esc>"
echoerr "Invalid project name or folder: " . a:project_name
end
endfunction
function! OpenProjectComplete(ArgLead, CmdLine, CursorPos)
let valid_keys = []
for project in keys(g:OpenProject#projects)
if l:project =~ a:ArgLead
call add(l:valid_keys, l:project)
endif
endfor
return l:valid_keys
endfunction
command! -nargs=1 -complete=customlist,OpenProjectComplete OpenProject call OpenProject(<f-args>)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment