Commit acd6a14a authored by Marc Cornellà's avatar Marc Cornellà Committed by GitHub
Browse files

Merge pull request #5296 from mcornella/fix-pj-plugin

Fix pj plugin
parents 75f2f4e0 bec53135
# pj
The `pj` plugin (short for `Project Jump`) allows you to define several
folders where you store your projects, so that you can jump there directly
by just using the name of the project directory.
Original idea and code by Jan De Poorter ([@DefV](https://github.com/DefV))
Source: https://gist.github.com/pjaspers/368394#gistcomment-1016
## Usage
1. Enable the `pj` plugin:
```zsh
plugins=(... pj)
```
2. Set `$PROJECT_PATHS` in your ~/.zshrc:
```zsh
PROJECT_PATHS=(~/src ~/work ~/"dir with spaces")
```
You can now use one of the following commands:
##### `pj my-project`:
`cd` to the directory named "my-project" found in one of the `$PROJECT_PATHS`
directories. If there are several directories named the same, the first one
to appear in `$PROJECT_PATHS` has preference.
For example:
```zsh
PROJECT_PATHS=(~/code ~/work)
$ ls ~/code # ~/code/blog ~/code/react
$ ls ~/work # ~/work/blog ~/work/project
$ pj blog # <-- will cd to ~/code/blog
```
##### `pjo my-project`
Open the project directory with your defined `$EDITOR`. This follows the same
directory rules as the `pj` command above.
Note: `pjo` is an alias of `pj open`.
#!/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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment