Skip to content

Instantly share code, notes, and snippets.

@chrisdickinson

chrisdickinson/note.sh Secret

Created Apr 27, 2021
Embed
What would you like to do?
#!/bin/bash
set -e
if [ ! -z "${1:-""}" ]; then
case "$1" in
"last"|"-")
$EDITOR ~/notes/$(ls ~/notes | grep -E '\.md$' | tail -n1)
;;
"search")
shift
files=$(ag "$@" ~/notes -l)
if [ ! -z "$files" ]; then
if [ $(wc -l <<< "$files") = "1" ]; then
$EDITOR -p -- $files
else
files=$(while read file; do basename $file; done <<< "$files" | fzf -m --preview 'ag '$@' ~/notes/{} --color ' | while read file; do echo "$HOME/notes/$file"; done)
if [ ! -z "$files" ]; then
$EDITOR -p -- $files
fi
fi
fi
;;
*)
>&2 echo "note [search|last]"
exit 1
;;
esac
exit
fi
file=$(mktemp)
mv "$file"{,.md}
file="${file}.md"
mtime_in=$(date -r "$file" "+%s")
if ${EDITOR:-/usr/bin/vim} $file; then
mtime_out=$(date -r "$file" "+%s")
if [ $mtime_in -eq $mtime_out ]; then
>&2 echo 'No changes to file. Discarding note.'
rm $file
exit 1
fi
else
>&2 echo '$EDITOR returned a non-zero exit code. Discarding note.'
rm $file
exit 1
fi
slug=$(sed '/[^[:blank:]]/q;d' < "$file" |
sed -e 's/[^a-zA-Z0-9]/-/g' |
sed -E 's/[\-]+/-/g' |
sed -e 's/^-//g' |
sed -e 's/-$//g' |
tr '[[:upper:]]' '[[:lower:]]')
dest="$HOME/notes/$(date -r "$file" "+%Y%m%d")-${slug:-untitled-note}"
suffix=""
while [ -e "${dest}${suffix}.md" ]; do
suffix=$((${suffix:-0} - 1))
done
mv "$file" "${dest}${suffix}.md"
echo "Stored note at \"${dest}${suffix}.md\"."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment