From c74378632f66e1b49dfa9075b1a237f74e497a8b Mon Sep 17 00:00:00 2001 From: cornfeedhobo Date: Sat, 26 Sep 2015 18:32:01 -0500 Subject: [PATCH] added projects plugin and completion --- completion/available/projects.completion.bash | 44 +++++++++++++++++++ plugins/available/projects.plugin.bash | 31 +++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 completion/available/projects.completion.bash create mode 100644 plugins/available/projects.plugin.bash diff --git a/completion/available/projects.completion.bash b/completion/available/projects.completion.bash new file mode 100644 index 00000000..f090f562 --- /dev/null +++ b/completion/available/projects.completion.bash @@ -0,0 +1,44 @@ +_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 + + _filedir -d + + if [[ ${#COMPREPLY[@]} -eq 1 ]]; then + i=${COMPREPLY[0]} + if [[ "$i" == "$cur" && $i != "*/" ]]; then + COMPREPLY[0]="${i}/" + fi + fi + + return 0 +} +if shopt -q cdable_vars; then + complete -v -F _pj -o nospace pj +else + complete -F _pj -o nospace pj +fi 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"