From 4241c6ef05d051e917da0dfed990d443d02b9851 Mon Sep 17 00:00:00 2001 From: PowerUser64 Date: Fri, 8 Apr 2022 02:32:05 -0700 Subject: [PATCH] ned: fzf is used everywhere now --- .config/shell/bin/ned | 99 +++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 56 deletions(-) diff --git a/.config/shell/bin/ned b/.config/shell/bin/ned index ce0f985..448d05a 100755 --- a/.config/shell/bin/ned +++ b/.config/shell/bin/ned @@ -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 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