summaryrefslogtreecommitdiffstats
path: root/.local/bin/notes
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/notes')
-rwxr-xr-x.local/bin/notes61
1 files changed, 49 insertions, 12 deletions
diff --git a/.local/bin/notes b/.local/bin/notes
index aa34960..814c021 100755
--- a/.local/bin/notes
+++ b/.local/bin/notes
@@ -1,17 +1,54 @@
#!/usr/bin/bash
-set -euo pipefail
+set -Eeuo pipefail
-APP_NAME=notes
+_srealpath() {
+ local path=$1
+ realpath "$path" 2>/dev/null && return
+ printf '%s\n' "$path"
+}
+
+_err_handler() {
+ local status=$?
+ local cmd=$BASH_COMMAND
+ local line=${BASH_LINENO[0]}
+ local err_log err_msg
+ local temp
+
+ err_log=$({
+ printf "error: command failed\n\n"
+ printf '\t%-10s: %s\n' \
+ "at" "$(_srealpath "${BASH_SOURCE[1]}"):$line" \
+ "command" "$cmd" \
+ "status" "$status"
+ printf '\nstack:\n\n'
+ local i
+ for ((i = 1; i < ${#FUNCNAME[@]}; ++i)); do
+ printf '\t%s at %s:%s\n' \
+ "${FUNCNAME[i]}" \
+ "$(_srealpath "${BASH_SOURCE[i]}")" \
+ "${BASH_LINENO[$((i - 1))]}"
+ done
+ })
+ if temp=$(mktemp --suffix .log /tmp/notes.XXXXXXXXXX) &&
+ printf '%s\n' "$err_log" >"$temp"; then
+ err_msg="Log saved to $temp"
+ else
+ err_msg="Could not create temp file for log"
+ fi
+ notify-send --expire-time 0 "Failed to open notes" "$err_msg"
+}
+
+trap _err_handler ERR
+
+################################################################################
-# Log with notify-send and exit 1
-err() {
- notify-send --app-name="$APP_NAME" --icon="accessories-text-editor" \
- "Neovim notes plugin" "$NOTES_DIR does not exist or is not a directory"
- exit 1
+main() {
+ local app_name=notes
+ [[ -d $NOTES_DIR ]]
+ cd "$NOTES_DIR"
+ exec foot --app-id "$app_name" --title "$app_name" -- \
+ tmux new-session -A -D -s "$app_name" -- \
+ nvim +NotesFindTags
}
-[[ -d $NOTES_DIR ]] || err
-cd "$NOTES_DIR"
-exec foot -- \
- tmux new-session -A -D -s "$APP_NAME" -- \
- nvim -c "NotesFindTags"
+if [[ ${BASH_SOURCE[0]} == "$0" ]]; then main; fi