diff options
| author | danix <danix@danix.xyz> | 2023-03-29 11:19:55 +0200 |
|---|---|---|
| committer | danix <danix@danix.xyz> | 2023-03-29 11:19:55 +0200 |
| commit | fb71118327216a21f6732161dc3721496a16370d (patch) | |
| tree | 96eddf131b1d802be87addd7faece45141e98a9a /SOURCE/CORE | |
| parent | ad818a9d1e26462bfb0c36d585dcbc33b38b37ca (diff) | |
| download | bash-notes-fb71118327216a21f6732161dc3721496a16370d.tar.gz bash-notes-fb71118327216a21f6732161dc3721496a16370d.zip | |
Separated script into multiple files for easier management. Added Makefile
Diffstat (limited to 'SOURCE/CORE')
| -rw-r--r-- | SOURCE/CORE/core-add.sh | 23 | ||||
| -rw-r--r-- | SOURCE/CORE/core-edit.sh | 23 | ||||
| -rw-r--r-- | SOURCE/CORE/core-list.sh | 22 | ||||
| -rw-r--r-- | SOURCE/CORE/core-remove.sh | 51 | ||||
| -rw-r--r-- | SOURCE/CORE/core-show.sh | 17 | ||||
| -rw-r--r-- | SOURCE/CORE/helpers.sh | 46 |
6 files changed, 182 insertions, 0 deletions
diff --git a/SOURCE/CORE/core-add.sh b/SOURCE/CORE/core-add.sh new file mode 100644 index 0000000..aa9d451 --- /dev/null +++ b/SOURCE/CORE/core-add.sh @@ -0,0 +1,23 @@ +function addnote() { + # remove eventually existing temp DB file + if [[ -f $TMPDB ]]; then + rm $TMPDB + fi + + NOTETITLE="$1" + echo "adding new note - \"$NOTETITLE\"" + # shellcheck disable=SC2086 + LASTID=$($JQ '.notes[-1].id // 0 | tonumber' $DB) + # [ "" == $LASTID ] && LASTID=0 + NOTEID=$(( LASTID + 1 )) + # shellcheck disable=SC2086 + touch ${NOTESDIR}/${NOW} + # shellcheck disable=SC2016 + $JQ --arg i "$NOTEID" --arg t "$NOTETITLE" --arg f "$NOW" '.notes += [{"id": $i, "title": $t, "file": $f}]' "$DB" > $TMPDB + # shellcheck disable=SC2086 + mv $TMPDB $DB + # example for alacritty: + # alacritty --class notes --title notes -e /usr/bin/vim ... + # shellcheck disable=SC2086,SC2091 + $(${TERMINAL} ${TERM_OPTS} ${EDITOR} ${NOTESDIR}/${NOW}) +} diff --git a/SOURCE/CORE/core-edit.sh b/SOURCE/CORE/core-edit.sh new file mode 100644 index 0000000..c42e63d --- /dev/null +++ b/SOURCE/CORE/core-edit.sh @@ -0,0 +1,23 @@ +function editnote() { + NOTE=$1 + # shellcheck disable=SC2155 + local OK=$(check_noteID "$NOTE") + if [ ! "$OK" ]; then + echo "invalid note \"$NOTE\"" + echo "Use the note ID that you can fetch after listing your notes" + exit 1 + fi + + # shellcheck disable=SC2016,SC2086 + TITLE=$($JQ --arg i $OK '.notes[] | select(.id == $i) | .title' $DB) + # shellcheck disable=SC2016,SC2086 + FILE=$($JQ -r --arg i $OK '.notes[] | select(.id == $i) | .file' $DB) + if [ "$TITLE" ]; then + echo "editing note $TITLE" + # shellcheck disable=SC2086,SC2091 + $(${TERMINAL} ${TERM_OPTS} ${EDITOR} ${NOTESDIR}/${FILE}) + else + echo "note not found" + exit 1 + fi +} diff --git a/SOURCE/CORE/core-list.sh b/SOURCE/CORE/core-list.sh new file mode 100644 index 0000000..0580df3 --- /dev/null +++ b/SOURCE/CORE/core-list.sh @@ -0,0 +1,22 @@ +function listnotes() { + # [ $PLAIN == true ] && echo "output is plain text" || echo "output is colored" + if [[ $(ls -A "$NOTESDIR") ]]; then + if [ $PLAIN == false ]; then + echo "listing all notes" + echo "" + fi + [ $PLAIN == false ] && echo "[ID] [TITLE] [CREATED]" + for i in "${NOTESDIR}"/*; do + # shellcheck disable=SC2155 + local fname=$(basename $i) + DATE=$(date -d @${fname} +"%d/%m/%Y %R %z%Z") + # shellcheck disable=SC2016,SC2086 + TITLE=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .title' $DB) + # shellcheck disable=SC2016,SC2086 + ID=$($JQ -r --arg z $(basename $i) '.notes[] | select(.file == $z) | .id' $DB) + [ $PLAIN == false ] && echo "[${ID}] ${TITLE} ${DATE}" || echo "${ID} - ${TITLE} - ${DATE}" + done + else + echo "no notes yet. You can add your first one with: ${BASENAME} -a \"your note title\"" + fi +} diff --git a/SOURCE/CORE/core-remove.sh b/SOURCE/CORE/core-remove.sh new file mode 100644 index 0000000..5776bbc --- /dev/null +++ b/SOURCE/CORE/core-remove.sh @@ -0,0 +1,51 @@ +function rmnote() { + # remove eventually existing temp DB file + if [[ -f $TMPDB ]]; then + rm $TMPDB + fi + + NOTE=$1 + if [ "all" == "$NOTE" ]; then + echo "You're going to delete all notes." + read -r -p "Do you wish to continue? (y/N) " ANSWER + case $ANSWER in + y|Y ) + # shellcheck disable=SC2086 + $JQ 'del(.notes[])' $DB > $TMPDB + # shellcheck disable=SC2086 + mv $TMPDB $DB + # shellcheck disable=SC2086 + rm $NOTESDIR/* + echo "Deleted all notes" + ;; + * ) + echo "Aborting, no notes were deleted." + exit 1 + ;; + esac + else + # shellcheck disable=SC2155 + local OK=$(check_noteID "$NOTE") + if [ ! "$OK" ]; then + echo "invalid note \"$NOTE\"" + echo "Use the note ID that you can fetch after listing your notes" + exit 1 + fi + + # shellcheck disable=SC2016,SC2086 + TITLE=$($JQ --arg i $OK '.notes[] | select(.id == $i) | .title' $DB) + # shellcheck disable=SC2016,SC2086 + FILE=$($JQ -r --arg i $OK '.notes[] | select(.id == $i) | .file' $DB) + if [ "$TITLE" ]; then + # shellcheck disable=SC2016,SC2086 + $JQ -r --arg i $OK 'del(.notes[] | select(.id == $i))' $DB > $TMPDB + # shellcheck disable=SC2086 + mv $TMPDB $DB + rm $NOTESDIR/$FILE + echo "Deleted note $TITLE" + else + echo "note not found" + exit 1 + fi + fi +} diff --git a/SOURCE/CORE/core-show.sh b/SOURCE/CORE/core-show.sh new file mode 100644 index 0000000..1a04c82 --- /dev/null +++ b/SOURCE/CORE/core-show.sh @@ -0,0 +1,17 @@ +function shownote() { + NOTE=$1 + + # shellcheck disable=SC2155 + local OK=$(check_noteID "$NOTE") + if [ ! "$OK" ]; then + echo "invalid note \"$NOTE\"" + echo "Use the note ID that you can fetch after listing your notes" + exit 1 + fi + + FILE=$($JQ -r --arg i $OK '.notes[] | select(.id == $i) | .file' $DB) + + if [ "$FILE" ]; then + $PAGER ${NOTESDIR}/${FILE} + fi +} diff --git a/SOURCE/CORE/helpers.sh b/SOURCE/CORE/helpers.sh new file mode 100644 index 0000000..a8f0981 --- /dev/null +++ b/SOURCE/CORE/helpers.sh @@ -0,0 +1,46 @@ +# check if input is a number, returns false or the number itself +function check_noteID() { + IN=$1 + case $IN in + ''|*[!0-9]*) + return 1 + ;; + *) + echo "$IN" + ;; + esac +} + +function helptext() { + echo "Usage:" + echo " $0 [PARAMS] ..." + echo "" + cat << __NOWCONF__ +${BASENAME} configuration is: + +base directory: ${BASEDIR}/ +notes archive: ${NOTESDIR}/ +notes database: ${DB} +rc file: $RCFILE +debug file: /tmp/debug_bash-note.log + +text editor: ${EDITOR} +terminal: ${TERMINAL} +jq executable: ${JQ} +__NOWCONF__ + + echo "" + echo "${BASENAME} parameters are:" + echo " -h | --help : This help text" + echo " -p | --plain : Output is in plain text" + echo " (without this option the output is formatted)" + echo " (this option must precede all others)" + echo " -l | --list : List existing notes" + echo " -a | --add [\"<title>\"] : Add new note" + echo " -e | --edit [<note>] : Edit note" + echo " -d | --delete [<note> | all] : Delete single note or all notes at once" + echo " -s | --show [<note>] : Display note using your favourite PAGER" + echo " -v | --version : Print version" + echo " --userconf : Export User config file" + echo "" +} |
