Add base
This commit is contained in:
70
base/.functions
Normal file
70
base/.functions
Normal file
@@ -0,0 +1,70 @@
|
||||
#! /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
|
||||
}
|
||||
|
Reference in New Issue
Block a user