|
@@ -1,49 +1,42 @@
|
|
|
-#!/bin/zsh
|
|
|
-
|
|
|
-#
|
|
|
-# Original idea by DefV (Jan De Poorter)
|
|
|
-# Source: https://gist.github.com/pjaspers/368394#comment-1016
|
|
|
-#
|
|
|
-# Usage:
|
|
|
-# - Set `$PROJECT_PATHS` in your ~/.zshrc
|
|
|
-# e.g.: PROJECT_PATHS=(~/src ~/work)
|
|
|
-# - In ZSH you now can open a project directory with the command: `pj my-project`
|
|
|
-# the plugin will locate the `my-project` directory in one of the $PROJECT_PATHS
|
|
|
-# Also tab completion is supported.
|
|
|
-# - `pjo my-project` will open the directory in $EDITOR
|
|
|
-#
|
|
|
-
|
|
|
-function pj() {
|
|
|
+alias pjo="pj open"
|
|
|
+
|
|
|
+pj () {
|
|
|
+ emulate -L zsh
|
|
|
+
|
|
|
cmd="cd"
|
|
|
- file=$1
|
|
|
+ project=$1
|
|
|
|
|
|
- if [[ "open" == "$file" ]] then
|
|
|
+ if [[ "open" == "$project" ]]; then
|
|
|
shift
|
|
|
- file=$*
|
|
|
- cmd=(${(s: :)EDITOR})
|
|
|
+ project=$*
|
|
|
+ cmd=${=EDITOR}
|
|
|
else
|
|
|
- file=$*
|
|
|
+ project=$*
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [[ -z "$project" ]]; then
|
|
|
+ echo "You have to specify a project name."
|
|
|
+ return
|
|
|
fi
|
|
|
|
|
|
- for project in $PROJECT_PATHS; do
|
|
|
- if [[ -d $project/$file ]] then
|
|
|
- $cmd "$project/$file"
|
|
|
- unset project # Unset project var
|
|
|
+ for basedir ($PROJECT_PATHS); do
|
|
|
+ if [[ -d "$basedir/$project" ]]; then
|
|
|
+ $cmd "$basedir/$project"
|
|
|
return
|
|
|
fi
|
|
|
done
|
|
|
|
|
|
- echo "No such project $1"
|
|
|
+ echo "No such project '${project}'."
|
|
|
}
|
|
|
|
|
|
-alias pjo="pj open"
|
|
|
+_pj () {
|
|
|
+ emulate -L zsh
|
|
|
|
|
|
-function _pj () {
|
|
|
- # might be possible to improve this using glob, without the basename trick
|
|
|
typeset -a projects
|
|
|
- projects=($PROJECT_PATHS/*)
|
|
|
- projects=$projects:t
|
|
|
- _arguments "*:file:($projects)"
|
|
|
-}
|
|
|
+ for basedir ($PROJECT_PATHS); do
|
|
|
+ projects+=(${basedir}/*(/N))
|
|
|
+ done
|
|
|
|
|
|
+ compadd ${projects:t}
|
|
|
+}
|
|
|
compdef _pj pj
|