ned: fzf is used everywhere now

This commit is contained in:
PowerUser64 2022-04-08 02:32:05 -07:00
parent 1eae827160
commit 4241c6ef05

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
# v1.0
# NEd: Note Editor (and your best friend!)
# Ned can edit and create notes in a folder you tell him to!
@ -9,10 +9,14 @@
# shellcheck disable=SC2068,SC2178,SC2128
# set default values if things are unset
NOTES_DIR="${NOTES_DIR:-"$HOME/Documents/college/current"}"
BASE_DIR="${NOTES_DIR:-"$HOME/Documents/college/current"}"
EDITOR="nvim"
EDITOR_CMD="nvim -c :ZenMode"
DEFAULT_NOTE_NAME="$(date +'%m-%d').md"
DEFAULT_NEW_NOTE_NAME="$(date +'%m-%d').md"
# Some fzf commands
FZF="fzf -1 --layout=reverse --info=inline --height=10%"
FZF_SEARCH="$FZF -q "
usage() {
cat <<-EOF
@ -24,91 +28,71 @@ usage() {
help Print this message
Notes:
'T' is an edit pointer to the default file name (today's date)
Edit 'T' to get today's note
Folder and file names are searched with fuzzy search
Ned will automatically activate the ZenMode neovim extension
Current repository path: '$NOTES_DIR'
ned will automatically activate the ZenMode neovim extension
Current repository path: '$BASE_DIR'
EOF
}
open_file() {
cd $(dirname "$1")
cd "$(dirname "$1")" || return
$EDITOR_CMD "$1"
}
# Usage:
# edit "unused param" ["search_directory"] "search_term"
edit() {
check_setup
# This logic is to allow the $2 to be optional
if [ -n "$3" ]; then
SEARCH_TERM="$3"
if [ -d "$NOTES_DIR/$2"* ]; then
NOTES_DIR="$(echo "$NOTES_DIR"/"$2"*)"
fi
NOTE_DIR="$(cd "$BASE_DIR" && fd -t f | sed 's-\./--g' | $FZF_SEARCH "$2")" || exit
elif [ -n "$2" ]; then
SEARCH_TERM="$2"
fi
# Searching for 'T' will get you today's note
if [ "$SEARCH_TERM" = 'T' ]; then
SEARCH_TERM="$DEFAULT_NOTE_NAME"
SEARCH_TERM="$DEFAULT_NEW_NOTE_NAME"
fi
NOTE_PATH="$NOTES_DIR/$(cd "$NOTES_DIR" && fzf -1 -q "$SEARCH_TERM" --layout=reverse --info=inline --height=10%)" || exit
NOTE="$NOTE_DIR/$(cd "$NOTE_DIR" && $FZF_SEARCH "$SEARCH_TERM")" || exit
cd "$(dirname "$NOTE_PATH")"
open_file "$NOTE_PATH"
open_file "$NOTE"
}
# Usage: new "unused param" "save directory" ["note name"]
new() {
check_setup
# Find out note name
# Note name
if [ -n "$3" ]; then
NOTE_NAME="$3.md"
NEW_NOTE_NAME="$3.md"
else
NOTE_NAME="$DEFAULT_NOTE_NAME"
NEW_NOTE_NAME="$DEFAULT_NEW_NOTE_NAME"
fi
# TODO: use fzf instead of fd + fzf for picking the directory
NOTE_PATH="$(fd -ad 1 "^$2" "$NOTES_DIR")"
# check if there were no results
if [ -z "$NOTE_PATH" ]; then
echo "No directories found for '$2'."
echo "All possible directories:"
(cd "$NOTES_DIR" && fd -d 1 -t d)
exit
# Note dir
NEW_NOTE_DIR="$BASE_DIR/$(cd "$BASE_DIR" && fd -d 1 | sed 's-\./--g' | $FZF_SEARCH "$2")" || exit
# if there was more than one result
elif [ "$(echo "$NOTE_PATH" | wc -l)" -gt 1 ]; then
NOTE_PATH="$(echo "$NOTE_PATH" | fzy)" || exit
fi
# TODO: allow setting location for files to go with $3, and $4 for file name
# check if there is a notes directory in the note path
if [ -d "$NOTE_PATH/notes" ]; then
NOTE_PATH="$NOTE_PATH/notes"
# if there is no notes directory
if [ -f "$NEW_NOTE_DIR/$NEW_NOTE_NAME" ]; then
open_file "$NEW_NOTE_DIR/$NEW_NOTE_NAME"
else
PROMPT="Place note in… "
NOTE_PATH="$(cd "$NOTE_PATH" && fd -ad 1 -t d | fzy -p "$PROMPT")" || exit
fi
if [ -f "$NOTE_PATH/$NOTE_NAME" ]; then
echo "File already exists. Opening..."
sleep 0.5
open_file "$NOTE_PATH/$NOTE_NAME"
else
cd "$NOTE_PATH" || exit
cd "$NEW_NOTE_DIR" || exit
# apply a template for notes
cat <<-EOF >> "$NOTE_PATH/$NOTE_NAME"
# $NOTE_NAME
cat <<-EOF >> "$NEW_NOTE_DIR/$NEW_NOTE_NAME"
# $NEW_NOTE_NAME
<!-- vim: wrap nonu nornu
-->
EOF
STARTING_MD5="$(md5sum "$NOTE_PATH/$NOTE_NAME")"
open_file "$NOTE_PATH/$NOTE_NAME"
if [ "$(md5sum "$NOTE_PATH/$NOTE_NAME")" = "$STARTING_MD5" ]; then
rm "$NOTE_PATH/$NOTE_NAME"
STARTING_MD5="$(md5sum "$NEW_NOTE_DIR/$NEW_NOTE_NAME")"
open_file "$NEW_NOTE_DIR/$NEW_NOTE_NAME"
# Delete the file if no changes were made
if [ "$(md5sum "$NEW_NOTE_DIR/$NEW_NOTE_NAME")" = "$STARTING_MD5" ]; then
rm "$NEW_NOTE_DIR/$NEW_NOTE_NAME"
fi
fi
}
@ -120,13 +104,16 @@ subshell() {
}
shell() {
cd "$NOTES_DIR" && subshell
if [ -n "${1+foo}" ]; then
DIR="$BASE_DIR/$(cd "$BASE_DIR" && fd -d 1 -t d | sed 's-\./--g' | $FZF_SEARCH "$1")" || exit
fi
cd "$DIR" || exit
}
check_setup() {
# perform preliminary checks to make sure the script can run properly
if ! [ -d "$NOTES_DIR" ]; then
echo "Error: Notes directory ($NOTES_DIR) does not exist or is not a directory"
if ! [ -d "$BASE_DIR" ]; then
echo "Error: Notes directory ($BASE_DIR) does not exist or is not a directory"
exit 1
fi
}
@ -140,10 +127,10 @@ case "${1}" in
# edit an existing document or file
'edit'|'ed') edit $@;;
# run a shell (cd to) in the directory
'x'|'cd'|'shell') shell;;
'cd') shell $@;;
# edit ned (the file you are looking at right now)
'ned') $EDITOR "$(realpath "$0")";;
*) echo "no such option";;
esac
# vim: et sw=3 ts=3 ft=bash
# vim: et sw=3 ts=3 ft=sh