You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.7 KiB
88 lines
1.7 KiB
#!/usr/bin/env bash |
|
|
|
function print_help(){ |
|
echo -e "switch\t\tSwitches the current project" |
|
echo -e "\t--auto\tAutomatically deduce the project based on current working directory" |
|
echo -e "\t--fzf\tUses fzf to choose a project" |
|
echo -e "\t--dmenu\tUses dmenu to choose a project" |
|
echo -e "\t--rofi\tUses rofi to choose a project" |
|
echo -e "\t--unset\tUnsets the project" |
|
echo -e "\t<project>\tSets the project" |
|
} |
|
|
|
function auto_switch(){ |
|
local switchto |
|
if echo "$PWD" | grep -q "$PROJECTS_PATH"; then |
|
switchto=$( echo "$PWD" | sed "s#$PROJECTS_PATH/##") |
|
switchto="${switchto%/*}" |
|
if [[ "$PWD" == "$PROJECTS_PATH" ]]; then |
|
switchto="--unset" |
|
fi |
|
else |
|
switchto="--unset" |
|
fi |
|
"$0" "$switchto" |
|
} |
|
function unset_project(){ |
|
if [ -L "$SYMLINC" ]; then |
|
rm "$SYMLINC" 2> /dev/null |
|
# See note about SIGWINCH below |
|
pkill -u $USER -SIGWINCH zsh |
|
project hosts hosts_file |
|
fi |
|
} |
|
|
|
function set_project(){ |
|
local switchto="$PROJECTS_PATH/$1" |
|
if [ -d "$switchto" ]; then |
|
if [ -L "$SYMLINC" ]; then |
|
rm "$SYMLINC" 2> /dev/null |
|
fi |
|
ln -s "$switchto" "$SYMLINC" |
|
pkill -u $USER -SIGWINCH zsh |
|
project hosts hosts_file |
|
else |
|
echo "No such directory $switchto" |
|
exit 1 |
|
fi |
|
} |
|
|
|
case "$1" in |
|
-h|--help) |
|
print_help | column -t -s" " |
|
exit 0 |
|
;; |
|
--parent-help) |
|
print_help |
|
exit 0 |
|
;; |
|
--auto) |
|
auto_switch |
|
exit 0 |
|
;; |
|
--fzf) |
|
project-list --options | fzf --no-preview | xargs "$0" |
|
exit 0 |
|
;; |
|
--dmenu) |
|
project-list --options | dmenu -i | xargs "$0" |
|
exit 0 |
|
;; |
|
--rofi) |
|
project-list --options | rofi -dmenu -i | xargs "$0" |
|
exit 0 |
|
;; |
|
--unset) |
|
unset_project |
|
exit 0 |
|
;; |
|
--new) |
|
project_new |
|
exit 0 |
|
;; |
|
*) |
|
set_project "$1" |
|
#list_projects "$@" |
|
exit 0 |
|
;; |
|
esac
|
|
|