From 20d704e9f99b2c764238961cd658499f9d5967e7 Mon Sep 17 00:00:00 2001
From: Salt <rehashedsalt@cock.li>
Date: Tue, 27 Nov 2018 23:32:44 -0600
Subject: [PATCH] .functions: Make more appealing to shellcheck Still doesn't
 load properly on sh, though

---
 .functions | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/.functions b/.functions
index 9427f97b..13912b52 100644
--- a/.functions
+++ b/.functions
@@ -10,20 +10,21 @@ proj() {
 		echo "proj: requires argument"
 		return 1
 	fi
-	projname="${1//[^ a-zA-Z0-9.]/}"
+	# POSIX mandates this external call to sed
+	projname="echo \"$1\" | sed '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"
+		cd "$projdir" || return 50
 	else
 		# It does not exist
 		echo "Creating new project \"$projname\""
 		mkdir -p "$projdir"
-		cd "$projdir"
-		if which git > /dev/null 2>&1; then
+		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
@@ -35,22 +36,31 @@ proj() {
 	fi
 }
 # Autocompletion for bash
-complete -F _proj proj > /dev/null 2>&1 &&
+# 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
+	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 &&
+compdef _proj proj > /dev/null 2>&1 && \
 _proj() {
-	for dir in $HOME/Projects/*; do
+	#! /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"