summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/pj
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/pj')
-rw-r--r--oh-my-zsh/plugins/pj/README.md45
-rw-r--r--oh-my-zsh/plugins/pj/pj.plugin.zsh34
2 files changed, 79 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/pj/README.md b/oh-my-zsh/plugins/pj/README.md
new file mode 100644
index 0000000..27e5638
--- /dev/null
+++ b/oh-my-zsh/plugins/pj/README.md
@@ -0,0 +1,45 @@
+# 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`.
diff --git a/oh-my-zsh/plugins/pj/pj.plugin.zsh b/oh-my-zsh/plugins/pj/pj.plugin.zsh
new file mode 100644
index 0000000..431576f
--- /dev/null
+++ b/oh-my-zsh/plugins/pj/pj.plugin.zsh
@@ -0,0 +1,34 @@
+alias pjo="pj open"
+
+function pj() {
+ local cmd="cd"
+ local project="$1"
+
+ if [[ "open" == "$project" ]]; then
+ shift
+ project=$*
+ cmd=${=EDITOR}
+ else
+ project=$*
+ fi
+
+ for basedir ($PROJECT_PATHS); do
+ if [[ -d "$basedir/$project" ]]; then
+ $cmd "$basedir/$project"
+ return
+ fi
+ done
+
+ echo "No such project '${project}'."
+}
+
+_pj () {
+ local -a projects
+ for basedir ($PROJECT_PATHS); do
+ projects+=(${basedir}/*(/N))
+ done
+
+ compadd ${projects:t}
+}
+
+compdef _pj pj