home/.functions

71 lines
1.7 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
# POSIX mandates this external call to sed
projname="$(echo "$1" | sed -re 's/[^ a-zA-Z0-9.-]//g')"
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" || return 50
else
# It does not exist
echo "Creating new project \"$projname\""
mkdir -p "$projdir"
cd "$projdir" || return 51
if command -v 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
# A note on the shellcheck disable: that's fine, because this is also a test
# If it fails, we don't even define a completion function
# shellcheck disable=2039
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.]/}"
# shellcheck disable=2179
COMPREPLY+=" $reply"
done
unset reply
# shellcheck disable=2178
COMPREPLY=($(compgen -W "$COMPREPLY" "${COMP_WORDS[COMP_CWORD]}"))
return 0
}
# Autocompletion for zsh
compdef _proj proj > /dev/null 2>&1 && \
_proj() {
#! /usr/bin/env zsh
# It's okay, shellcheck
# We zsh now
# shellcheck disable=2039
for dir in "$HOME"/Projects/*; do
temp="$(basename "$dir")"
temp="${reply//[^ a-zA-Z0-9.]/}"
reply+=" $temp"
done
return 0
}