Project opener.
This commit is contained in:
parent
d2c517b7fd
commit
bdb80771c6
@ -74,6 +74,11 @@ alias npm-release='npm version minor -m "%s"'
|
||||
alias gw="grunt watch --debug"
|
||||
ginit() { grunt init:$@ ;}
|
||||
|
||||
# Magic Project Opener
|
||||
function proj { cd "$("$HOME/dotfiles/bin/opener.py" "$HOME/Dropbox/Projects" $1 -w project $2)"; }
|
||||
function repo { cd "$("$HOME/dotfiles/bin/opener.py" "$HOME/Dropbox/Projects" $1 -w repo $2)"; }
|
||||
function wptheme { cd "$("$HOME/dotfiles/bin/opener.py" "$HOME/Dropbox/Projects" $1 -w wptheme $2)"; }
|
||||
|
||||
# Load external aliases
|
||||
source ~/dotfiles/includes/root.sh
|
||||
source ~/dotfiles/includes/functions.sh
|
||||
|
95
bin/opener.py
Executable file
95
bin/opener.py
Executable file
@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#
|
||||
# Magic project opener
|
||||
# © 2012 Artem Sapegin (sapegin.me)
|
||||
#
|
||||
|
||||
|
||||
import os
|
||||
import glob
|
||||
import re
|
||||
import sys
|
||||
import argparse
|
||||
import subprocess
|
||||
import platform
|
||||
|
||||
WHAT_CHOICES = 'project', 'repo', 'wptheme'
|
||||
IS_MAC = platform.system() == 'Darwin'
|
||||
|
||||
|
||||
def main():
|
||||
projects_dir, project_name, what, is_open = parse_arguments()
|
||||
|
||||
os.chdir(projects_dir)
|
||||
|
||||
project = find_project(project_name)
|
||||
if not project:
|
||||
sys.exit('No project found.')
|
||||
|
||||
func_name = 'find__%s' % what
|
||||
if func_name not in globals():
|
||||
sys.exit('Function not found.')
|
||||
|
||||
func = globals()[func_name]
|
||||
folder = func(project)
|
||||
|
||||
open('%s/%s' % (projects_dir, folder), is_open)
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser(description='Magic project opener.')
|
||||
parser.add_argument('projects_dir', nargs=1, help='Base projects directiory.')
|
||||
parser.add_argument('project_name', nargs=1, help='Fuzzy project name.')
|
||||
parser.add_argument('-w', '--what', choices=WHAT_CHOICES, default=WHAT_CHOICES[0], help='Part of project to open.')
|
||||
parser.add_argument('-o', '--open', action='store_true', help='Open in %s.' % ('Finder' if IS_MAC else 'Windows Explorer'))
|
||||
args = parser.parse_args()
|
||||
return args.projects_dir[0], args.project_name[0], args.what, args.open
|
||||
|
||||
|
||||
def find_project(name):
|
||||
pattern = '.*'.join(list(name))
|
||||
folders = glob.glob('*/*/')
|
||||
for folder in folders:
|
||||
if re.search(pattern, folder, re.IGNORECASE):
|
||||
return folder
|
||||
return None
|
||||
|
||||
|
||||
def find__project(project):
|
||||
return project
|
||||
|
||||
|
||||
def find__repo(project):
|
||||
git = glob.glob(project + '/.git/')
|
||||
if git:
|
||||
return project
|
||||
|
||||
repos = glob.glob(project + '/*/.git/')
|
||||
if not repos:
|
||||
sys.exit('Git repo not found in this project.')
|
||||
return os.path.dirname(os.path.dirname(repos[0]))
|
||||
|
||||
|
||||
def find__wptheme(project):
|
||||
themes = glob.glob(project + '/*/wp-content/themes/*/')
|
||||
if not themes:
|
||||
sys.exit('Wordpress installation not found in this project.')
|
||||
return themes[0]
|
||||
|
||||
|
||||
def open(path, is_open):
|
||||
path = os.path.normpath(path)
|
||||
if is_open:
|
||||
subprocess.Popen(r'%s "%s"' % ('open' if IS_MAC else 'explorer', path))
|
||||
else:
|
||||
# Should be used via Bash alias like this:
|
||||
# function proj {
|
||||
# cd "$("C:\Cormorant\Dropbox\My Dropbox\Projects\opener.py" "C:\Cormorant\Dropbox\My Dropbox\Projects" $1 -w project $2)"
|
||||
# }
|
||||
print path
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user