summaryrefslogtreecommitdiff
path: root/plugins/pj/pj.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pj/pj.plugin.zsh')
-rw-r--r--plugins/pj/pj.plugin.zsh54
1 files changed, 21 insertions, 33 deletions
diff --git a/plugins/pj/pj.plugin.zsh b/plugins/pj/pj.plugin.zsh
index 1572e9363..e36d49204 100644
--- a/plugins/pj/pj.plugin.zsh
+++ b/plugins/pj/pj.plugin.zsh
@@ -1,49 +1,37 @@
-#!/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
- 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