71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			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 '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
 | |
| }
 | |
| 
 |