tools -> scripts
This commit is contained in:
73
scripts/utils/note
Executable file
73
scripts/utils/note
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Note taking tool
|
||||
#
|
||||
# Usage:
|
||||
# note [name] - Create a new note with optional name (defaults to "New note")
|
||||
# note -e|--edit [name] - Edit an existing note by name
|
||||
#
|
||||
# Arguments explanation:
|
||||
# [name] - Note filename (without extension) and title
|
||||
# -e, --edit [name] - Edit existing note by name
|
||||
#
|
||||
# Detailed usage:
|
||||
# note - Creates "New note" with current timestamp
|
||||
# note my-idea - Creates note titled "my-idea"
|
||||
# note my-idea "My Great Idea" - Creates note file "my-idea" but titled "My Great Idea"
|
||||
# note -e my-idea - Edits existing note with name "my-idea"
|
||||
#
|
||||
# Notes are stored as markdown files in ~/notes/ with timestamps
|
||||
# When multiple notes have the same name, you'll be prompted to select which one to edit
|
||||
|
||||
arg1="$1"
|
||||
arg2="$2"
|
||||
path="$HOME/notes"
|
||||
[[ ! -d "$path" ]] && mkdir -p "$path"
|
||||
|
||||
shopt -s nullglob
|
||||
files=("$path"/*.md)
|
||||
shopt -u nullglob
|
||||
|
||||
case "$arg1" in
|
||||
-e|--edit)
|
||||
[[ -z "$arg2" ]] && {
|
||||
echo "Note name is required"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2207
|
||||
found=($(echo "${files[@]}" | grep -P "[0-9]{10}-$arg2.md"))
|
||||
[[ ${#found[@]} -eq 0 ]] && {
|
||||
echo "Note with name '$arg2' not found."
|
||||
echo "Create it with using 'note $arg2'"
|
||||
exit
|
||||
}
|
||||
|
||||
[[ ${#found[@]} -eq 1 ]] && {
|
||||
nano "${found[0]}"
|
||||
exit
|
||||
}
|
||||
|
||||
PS3="Select a note to edit: "
|
||||
select selection in "${found[@]}" "Exit"; do
|
||||
[[ "$selection" == "Exit" ]] && exit
|
||||
[[ -f "$selection" ]] && {
|
||||
nano "$selection"
|
||||
exit
|
||||
}
|
||||
continue
|
||||
done
|
||||
;;
|
||||
|
||||
*)
|
||||
[[ -z "$arg2" ]] && arg2="${arg1:-New note}"
|
||||
file="$path/$(date +%s)-$arg1.md"
|
||||
cat <<EOF > "$file"
|
||||
# $arg2
|
||||
|
||||
Note taken: $(date '+%d.%m.%Y %H:%M:%S')
|
||||
|
||||
EOF
|
||||
nano "$file"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user