diff options
Diffstat (limited to 'plugins/pj/pj.plugin.zsh')
| -rw-r--r-- | plugins/pj/pj.plugin.zsh | 54 | 
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  | 
