blob: b7431c25f54353f6faf44659135b2de3e2e7dd89 (
plain) (
tree)
|
|
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [[ "${TRACE-0}" == "1" ]]; then
set -o xtrace
fi
EDITOR="subl -n -b"
add-moons () {
if [[ -d ".moons" ]]; then
touch ".moons/$1"
echo -e "a new moon is orbiting $2"
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
touch "$path/.moons/$1"
echo -e "a new moon is orbiting $2"
return
fi
done
fi
}
delete-moon-by-moon-id () {
if [[ -d ".moons" ]]; then
rm .moons/*"$1"*
echo -e "the moon $1 has been removed"
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
rm "$path/.moons/"*"$1"*
echo -e "the moon $1 has been removed"
return
fi
done
fi
}
delete-moons-by-planet () {
if [[ -d ".moons" ]]; then
rm .moons/"$1"*
echo -e "all moons orbiting $1 have been deleted."
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
rm "$path/.moons/$1"*
echo -e "all moons orbiting $1 have been deleted."
return
fi
done
fi
}
open-moons () {
if [[ -d ".moons" ]]; then
for file in .moons/$1; do
echo -e "$file"
$EDITOR "$file"
done
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
for file in $path/.moons/$1; do
echo -e "$file"
$EDITOR "$file"
done
return
fi
done
fi
}
list-moons-by-planet () {
if [[ -d ".moons" ]]; then
ls -a .moons/"$1"*
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
ls -a "$path/.moons/$1"*
return
fi
done
fi
}
rename-planet-and-orbiting-moons () {
if [[ -d ".moons" ]]; then
for file in .moons/"$1"* ; do mv "$file" "${file//$1/$2}" ; done
echo -e "planets and moons have been renamed from $1 to $2"
else
path=$(pwd)
while [ -n "$path" ]; do
path=${path%/*}
if [ -d "$path/.moons" ]; then
for file in "$path/.moons/$1"* ; do mv "$file" "${file//$1/$2}" ; done
echo -e "planets and moons have been renamed from $1 to $2"
return
fi
done
fi
}
PRE_SHORT_RAND=$(openssl rand -base64 6)
SHORT_RAND=${PRE_SHORT_RAND//\//_}
help_text() {
echo '
A planet file is the one you care about -- probably an file in an actual project.
Moon files orbit planets, they are disposable scratch spaces connected to planets.
usage: ./mm
-i(nit)....initialize a directory to store moon files
-o(pen)....open a planet file and all of its moon files
-l(ist)....list all moons for a given planet file
-a(dd).....create a new moon file for a given planet file
-d(elete)..remove a moon file by its id
-c(lear)...remove all moon files for a given planet file
-u(pdate)..rename a planet file and all of its moon files
'
}
if [[ "${1-}" =~ ^-*h(elp)?$ ]]; then
help_text "$@"
exit
elif [[ "${1-}" =~ ^-*i(nit)?$ ]]; then
if [[ ! -d ".moons" ]]; then
mkdir ".moons"
echo -e "moons initialized"
else
echo -e "there's already a moon directory here"
fi
exit
elif [[ "${1-}" =~ ^-*o(pen)?$ ]]; then
$EDITOR "$2"
open-moons "$2*"
exit
elif [[ "${1-}" =~ ^-*a(dd)?$ ]]; then
if [ $# -ge 3 ]; then
FILE_TYPE="$3" # optionally pass a file type you'd like to append to the moon
else
FILE_TYPE="txt" # if you don't provide a file type assume .txt for the new moon
fi
NEW_MOON="$2"."$SHORT_RAND"."$FILE_TYPE"
add-moons "$NEW_MOON" "$2"
exit
elif [[ "${1-}" =~ ^-*l(ist)?$ ]]; then
list-moons-by-planet "$2"
exit
elif [[ "${1-}" =~ ^-*d(elete)?$ ]]; then
delete-moon-by-moon-id "$2"
exit
elif [[ "${1-}" =~ ^-*c(lear)?$ ]]; then
delete-moons-by-planet "$2"
exit
elif [[ "${1-}" =~ ^-*u(pdate)?$ ]]; then
mv "$2" "$3"
rename-planet-and-orbiting-moons "$2" "$3"
exit
fi
cd "$(dirname "$0")"
main() {
echo -e '
Moon Maker
⋆。°✩ ☾
mm is a small program that lets you add orbiting moons to existing planets.'
help_text "$@"
}
main "$@"
|