56 lines
1.2 KiB
Bash
56 lines
1.2 KiB
Bash
#! /bin/sh
|
|
#
|
|
# .functions
|
|
# Functions for interactive shells
|
|
#
|
|
|
|
proj() {
|
|
# Ensure we have an argument
|
|
if [ -z ${1+x} ]; then
|
|
echo "proj: requires argument"
|
|
return 1
|
|
fi
|
|
projname="${1//[^ a-zA-Z0-9.]/}"
|
|
projdir="$HOME/Projects/$projname"
|
|
# Ensure we have a ~/Projects directory
|
|
mkdir -p "$HOME/Projects" > /dev/null 2>&1
|
|
# cd into the project or make it if necessary
|
|
if [ -d "$projdir" ]; then
|
|
# It exists
|
|
cd "$projdir"
|
|
else
|
|
# It does not exist
|
|
echo "Creating new project \"$projname\""
|
|
mkdir -p "$projdir"
|
|
cd "$projdir"
|
|
if which git > /dev/null 2>&1; then
|
|
# Initialize git
|
|
echo "Initializing git with .gitignore"
|
|
git init > /dev/null 2>&1
|
|
echo '*.swp' > .gitignore
|
|
git add .gitignore > /dev/null 2>&1
|
|
git commit -am "Create gitignore" > /dev/null 2>&1
|
|
git status
|
|
fi
|
|
fi
|
|
}
|
|
# Autocompletion for bash
|
|
complete -F _proj proj > /dev/null 2>&1 &&
|
|
_proj() {
|
|
[ "${#COMP_WORDS[@]}" != "2" ] && return 0
|
|
for dir in $HOME/Projects/*; do
|
|
reply="$(basename "$dir")"
|
|
reply="${reply//[^ a-zA-Z0-9.]/}"
|
|
COMPREPLY+=" $reply"
|
|
done
|
|
unset reply
|
|
COMPREPLY=($(compgen -W "$COMPREPLY" "${COMP_WORDS[COMP_CWORD]}"))
|
|
return 0
|
|
}
|
|
# Autocompletion for zsh
|
|
compdef _proj proj > /dev/null 2>&1 &&
|
|
_proj() {
|
|
return 0
|
|
}
|
|
|