This repository has been archived on 2025-01-31. You can view files and clone it, but cannot push or open issues or pull requests.
Files
.bin
.config
.firestarter
.local
.ssh
.vim
.bashrc
.functions
.gitconfig
.gitmodules
.inputrc
.joy2keyrc
.profile
.vimrc
.xinitrc
.xsessionrc
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
}