101 lines
2.0 KiB
Bash
101 lines
2.0 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
|
||
|
|
set -uo pipefail
|
||
|
|
export LC_ALL=en_US.UTF-8
|
||
|
|
export LANG=en_US.UTF-8
|
||
|
|
|
||
|
|
LAUNCHER=('rofi' '-kb-custom-1' 'Alt+d' '-kb-custom-2' 'Alt+n' '-kb-custom-3' 'Alt+e' '-theme-str' 'window {width: 20%;}' '-dmenu' '-c' '-l' '10' '-p')
|
||
|
|
NOTESDIR="${XDG_DOCUMENTS_DIR:-$HOME/.notes}"
|
||
|
|
mkdir -p "$NOTESDIR"
|
||
|
|
|
||
|
|
newnote() {
|
||
|
|
local NAME
|
||
|
|
NAME=$(printf "%s" "$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2-)" | \
|
||
|
|
"${LAUNCHER[@]}" "new:" | xargs)
|
||
|
|
|
||
|
|
if [[ -z "$NAME" ]]; then
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
touch "${NOTESDIR}/${NAME}"
|
||
|
|
main
|
||
|
|
}
|
||
|
|
|
||
|
|
opennote() {
|
||
|
|
local NOTE="$1"
|
||
|
|
$TERMINAL --class notes "$EDITOR" "${NOTESDIR}/${NOTE}"
|
||
|
|
main
|
||
|
|
}
|
||
|
|
|
||
|
|
deletenote() {
|
||
|
|
local NOTE="${1:-}"
|
||
|
|
|
||
|
|
if [[ -z "$NOTE" ]]; then
|
||
|
|
NOTE=$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2- | \
|
||
|
|
"${LAUNCHER[@]}" "delete:")
|
||
|
|
fi
|
||
|
|
|
||
|
|
[[ -z "$NOTE" ]] && return 1
|
||
|
|
|
||
|
|
local CONFIRM
|
||
|
|
CONFIRM=$(printf "%s\n%s\n" "no" "yes" | \
|
||
|
|
"${LAUNCHER[@]}" "delete ${NOTE}:")
|
||
|
|
|
||
|
|
if [[ "$CONFIRM" == "yes" ]]; then
|
||
|
|
rm "${NOTESDIR}/${NOTE}"
|
||
|
|
echo "Deleted ${NOTE}"
|
||
|
|
fi
|
||
|
|
main
|
||
|
|
}
|
||
|
|
|
||
|
|
editnote() {
|
||
|
|
local NOTE="${1:-}"
|
||
|
|
NAME=$(echo "" | \
|
||
|
|
"${LAUNCHER[@]}" 'edit:' -filter "$NOTE" -matching prefix)
|
||
|
|
|
||
|
|
if [[ -z "$NAME" ]]; then
|
||
|
|
main
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ "${NOTE}" != "${NAME}" ]]; then
|
||
|
|
mv "${NOTESDIR}/${NOTE}" "${NOTESDIR}/${NAME}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
main
|
||
|
|
}
|
||
|
|
|
||
|
|
main() {
|
||
|
|
local CHOICE
|
||
|
|
CHOICE=$(printf "%s" "$(find "$NOTESDIR" -maxdepth 1 -type f -printf '%T@ %f\n' | sort -rn | cut -d' ' -f2-)" | \
|
||
|
|
"${LAUNCHER[@]}" "notes:")
|
||
|
|
|
||
|
|
local EXITCODE=$?
|
||
|
|
case $EXITCODE in
|
||
|
|
0) # Enter pressed
|
||
|
|
case "$CHOICE" in
|
||
|
|
*) opennote "$CHOICE" ;;
|
||
|
|
esac
|
||
|
|
;;
|
||
|
|
10) # Delete pressed
|
||
|
|
case "$CHOICE" in
|
||
|
|
*) deletenote "$CHOICE" ;;
|
||
|
|
esac
|
||
|
|
;;
|
||
|
|
11) # New pressed
|
||
|
|
case "$CHOICE" in
|
||
|
|
*) newnote ;;
|
||
|
|
esac
|
||
|
|
;;
|
||
|
|
12)
|
||
|
|
case "$CHOICE" in
|
||
|
|
*) editnote "$CHOICE";;
|
||
|
|
esac
|
||
|
|
;;
|
||
|
|
1) # Escape pressed
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
}
|
||
|
|
|
||
|
|
main
|