Blame view

plugins/pj/pj.plugin.zsh 1.11 KB
093a6c34b   mj   Squashed 'repos/r...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  #!/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() {
      cmd="cd"
      file=$1
  
      if [[ "open" == "$file" ]] then
          shift
          file=$*
          cmd=(${(s: :)EDITOR})
      else
          file=$*
      fi
  
      for project in $PROJECT_PATHS; do
          if [[ -d $project/$file ]] then
              $cmd "$project/$file"
              unset project # Unset project var
              return
          fi
      done
  
      echo "No such project $1"
  }
  
  alias pjo="pj open"
  
  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)"
  }
  
  compdef _pj pj