diff --git a/completion/available/projects.completion.bash b/completion/available/projects.completion.bash new file mode 100644 index 00000000..a46864b7 --- /dev/null +++ b/completion/available/projects.completion.bash @@ -0,0 +1,38 @@ +_pj() { + [ -z "$PROJECT_PATHS" ] && return + shift + [ "$1" == "open" ] && shift + + local cur prev words cword + _init_completion || return + + local IFS=$'\n' i j k + + compopt -o filenames + + local -r mark_dirs=$(_rl_enabled mark-directories && echo y) + local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y) + + for i in ${PROJECT_PATHS//:/$'\n'}; do + # create an array of matched subdirs + k="${#COMPREPLY[@]}" + for j in $( compgen -d $i/$cur ); do + if [[ ( $mark_symdirs && -h $j || $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then + j+="/" + fi + COMPREPLY[k++]=${j#$i/} + done + done + + if [[ ${#COMPREPLY[@]} -eq 1 ]]; then + i=${COMPREPLY[0]} + if [[ "$i" == "$cur" && $i != "*/" ]]; then + COMPREPLY[0]="${i}/" + fi + fi + + return 0 +} + +complete -F _pj -o nospace pj + diff --git a/plugins/available/projects.plugin.bash b/plugins/available/projects.plugin.bash new file mode 100644 index 00000000..6e4926ca --- /dev/null +++ b/plugins/available/projects.plugin.bash @@ -0,0 +1,31 @@ +cite about-plugin +about-plugin 'add "export PROJECT_PATHS=~/projects:~/intertrode/projects" to navigate quickly to your project directories with `pj` and `pjo`' + +function pj { + about 'navigate quickly to your various project directories' + group 'projects' + + if [ -n "$PROJECT_PATHS" ]; then + local cmd + + if [ "$1" == "open" ]; then + shift + cmd="$EDITOR" + fi + + cmd="${cmd:-cd}" + + if [ -n "$1" ]; then + for i in ${PROJECT_PATHS//:/$'\n'}; do + if [ -d "$i"/"$1" ]; then + $cmd "$i"/"$1" + return + fi + done + fi + fi + + echo "No such project '$1'" +} + +alias pjo="pj open"