memo/memo

101 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# memos
# written 2020 by konomo
# all rights reversed; copy what you like; community over copyright
# define memo array
memos=("")
# define memo name array
memonames=("")
# get the arguments
args=("$@")
# memo directory
memodir=$HOME/.memos
# define the length at which a line is wrapped
wraplength=32
readmemos() {
# check for empty memo directory
if [ -z "$(ls -A ${memodir}/)" ]; then
echo -e "there are no memos.\ncreate one by passing the 'new' argument\n-~-~-MEMOS-~-~-"
exit 0
fi
for m in $memodir/*
do
# wish i could just use memos+= to be honest, but
# for some reason i can't.
memos[${#memos[@]}]=$(cat $m)
memonames[${#memonames[@]}]=$(echo "${m}" | tr -d '\n')
done
}
printmemos() {
count=0
for i in "${memos[@]}"
do
echo -n "${i}" | fold -w "${wraplength}"
if [ -n "${memonames[${count}]}" ]; then
echo -e " -> ${memonames[${count}]}"
fi
((count++))
done
}
newmemo() {
echo "please enter the filename (will write to ${memodir})"
read memopath
if [ -f "${memodir}/${memopath}" ]; then
echo "this memo already exists"
newmemo
fi
# create file
touch "${memodir}/${memopath}"
echo -e "\nplease enter the memo now (will be single lined, but wrapped at ${wraplength} characters)\nbe sure to choose a fitting filename"
read memoline
# write to file without newline
echo -n "${memoline}" > "${memodir}/${memopath}"
# memos are private!
chmod 400 "${memodir}/${memopath}"
exit
}
rmmemo() {
if [ -z "$(ls -A ${memodir}/)" ]; then
echo -e "there are no memos.\ncreate one by passing the 'new' argument"
exit 0
fi
echo "you can remove these memos:"
ls $memodir
read memochoose
if [ -f "${memodir}/${memochoose}" ]; then
rm -i "${memodir}/${memochoose}"
fi
exit
}
case ${args[0]} in
new)
newmemo
;;
remove | rm)
rmmemo
;;
*)
echo -e "-~-~-MEMOS-~-~-"
readmemos
printmemos
echo "-~-~-MEMOS-~-~-"
;;
esac