Merge pull request #2010 from gaelicWizard/plugin-projects

Plugin/projects: cleanup
pull/2040/head
Noah Gorny 2022-01-25 18:28:53 +02:00 committed by GitHub
commit 2575d64deb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 65 deletions

View File

@ -118,6 +118,7 @@ plugins/available/osx-timemachine.plugin.bash
plugins/available/osx.plugin.bash plugins/available/osx.plugin.bash
plugins/available/percol.plugin.bash plugins/available/percol.plugin.bash
plugins/available/plenv.plugin.bash plugins/available/plenv.plugin.bash
plugins/available/projects.plugin.bash
plugins/available/proxy.plugin.bash plugins/available/proxy.plugin.bash
plugins/available/pyenv.plugin.bash plugins/available/pyenv.plugin.bash
plugins/available/python.plugin.bash plugins/available/python.plugin.bash

View File

@ -1,53 +1,40 @@
cite about-plugin # shellcheck shell=bash
about-plugin 'quickly navigate configured paths with `pj` and `pjo`. example: "export PROJECT_PATHS=~/projects:~/work/projects"' about-plugin 'quickly navigate configured project paths'
function pj { : "${BASH_IT_PROJECT_PATHS:=$HOME/Projects:$HOME/src:$HOME/work}"
about 'navigate quickly to your various project directories'
group 'projects'
function pj() {
about 'navigate quickly to your various project directories'
group 'projects'
if [ -z "$PROJECT_PATHS" ]; then local proj="${1?${FUNCNAME[0]}: project name required}"
echo "error: PROJECT_PATHS not set" local cmd PS3 dest d
return 1 local -a dests
fi
if [[ "$proj" == "open" ]]; then
local cmd
local dest
local -a dests
if [ "$1" == "open" ]; then
shift shift
cmd="$EDITOR" proj="${1}"
fi cmd="${EDITOR?}"
cmd="${cmd:-cd}"
if [ -z "$1" ]; then
echo "error: no project provided"
return 1
fi
# collect possible destinations to account for directories
# with the same name in project directories
for i in ${PROJECT_PATHS//:/$'\n'}; do
if [ -d "$i"/"$1" ]; then
dests+=("$i/$1")
fi fi
done
# collect possible destinations to account for directories
# with the same name in project directories
IFS=':' read -ra dests <<< "${BASH_IT_PROJECT_PATHS?${FUNCNAME[0]}: project working folders must be configured}"
for d in "${!dests[@]}"; do
if [[ ! -d "${dests[d]}" ]]; then
unset 'dests[d]'
fi
done
# when multiple destinations are found, present a menu case ${#dests[@]} in
if [ ${#dests[@]} -eq 0 ]; then 0)
echo "error: no such project '$1'" _log_error "BASH_IT_PROJECT_PATHS must contain at least one existing location"
return 1 return 1
;;
elif [ ${#dests[@]} -eq 1 ]; then 1)
dest="${dests[0]}" dest="${dests[*]}/${proj}"
;;
elif [ ${#dests[@]} -gt 1 ]; then *)
PS3="Multiple project directories found. Please select one: " PS3="Multiple project directories found. Please select one: "
dests+=("cancel") dests+=("cancel")
select d in "${dests[@]}"; do select d in "${dests[@]}"; do
@ -56,20 +43,15 @@ elif [ ${#dests[@]} -gt 1 ]; then
return return
;; ;;
*) *)
dest=$d dest="${d}/${proj}"
break break
;; ;;
esac esac
done done
;;
esac
else "${cmd:-cd}" "${dest}"
echo "error: please report this error"
return 1 # should never reach this
fi
$cmd "$dest"
} }
alias pjo="pj open" alias pjo="pj open"

View File

@ -38,6 +38,9 @@ export IRC_CLIENT='irssi'
# Set this to the command you use for todo.txt-cli # Set this to the command you use for todo.txt-cli
export TODO="t" export TODO="t"
# Set this to the location of your work or project folders
#BASH_IT_PROJECT_PATHS="${HOME}/Projects:/Volumes/work/src"
# Set this to false to turn off version control status checking within the prompt for all themes # Set this to false to turn off version control status checking within the prompt for all themes
export SCM_CHECK=true export SCM_CHECK=true
# Set to actual location of gitstatus directory if installed # Set to actual location of gitstatus directory if installed